嵌入式面试常见问题(一)
目录
1.什么情况下会出现段错误?
2.swap() 函数为什么不能交换两个变量的值
3.一个函数有六个参数 分别放在哪个区?
4.定义一个变量,赋初值和不赋初值分别保存在哪个区?
5.linux查看端口状态的命令
6.结构体中->和.的区别
1.什么情况下会出现段错误?
答:一种可能是栈溢出
在Linux环境下,每一个用户进程默认有8MB大小的栈空间,如果你在函数内定义大容量的数组或局部变量,就可能造成栈溢出,也会引发一个段错误。内核中的线程也是如此,每一个内核线程只有8KB的内核栈,在实际使用中也要非常小心,防止堆栈溢出。
比如查看当前栈的大小,为8M
![]()
运行代码如下:
#include<stdio.h>
int main()
{char buf[8*1024*1024];printf("hello world!\n");return 0;
}
运行后就会出现如下错误
![]()
将栈的大小设置为10M就可以正常输出:
linux进程栈大小最好不要设置为无限大,不然数据不安全

定义大的buf不建议使用数组,一般使用堆区 ,比如malloc
第二种是因为递归
第三种是空指针解引用、数组越界访问、使用已释放的内存
发生段错误的根本原因在于非法访问内存,即访问了权限未许可的内存空间
2.swap() 函数为什么不能交换两个变量的值

形参只有在函数被调用时才会在函数栈帧内分配存储单元,用来接收传进来的实参值。函数运行结束后,形参单元随着栈帧的销毁而被释放。变量作为实参传递时,只是将其值复制到形参的存储空间,在函数运行期间,改变形参的值并不会改变原来实参的值,因为两者存储在栈中不同的内存单元上。
3.一个函数有六个参数 分别放在哪个区?
在函数调用过程中,当要传递的参数个数小于4时,直接使用R0~R3寄存器传递即可;当要传递的参数个数大于4时,前4个参数使用寄存器传递,剩余的参数则压入堆栈保存。

·在上面的程序中,main()函数调用了f()函数,并传过去6个实参求和。根据ATPCS规则,除了前4个参数使用寄存器R0~R3传递,剩下的2个参数要通过压栈来传递。在参数传递过程中,各个参数压栈、出栈的顺序也要有一个约定,如上面的6个参数,是从右往左依次压入堆栈 。
4.定义一个变量,赋初值和不赋初值分别保存在哪个区?
在C语言中,全局变量的存储方式取决于是否给变量赋予了初始值。
全局变量有初始值:
- 如果全局变量有初始值,它将保存在数据段(Data Segment)中的已初始化数据区(Initialized Data Segment)。
- 初始化的全局变量在程序执行之前就会被分配内存,并且初始值会在程序加载时被复制到数据段中。
全局变量无初始值:
- 如果全局变量没有初始值,它将保存在数据段中的未初始化数据区(Uninitialized Data Segment),也被称为BSS段(Block Started by Symbol)。
- 未初始化的全局变量在程序加载时会被分配内存,但是内存中的值是未定义的(通常是0或者是垃圾值)。
5.linux查看端口状态的命令
在Linux系统中,可以使用以下命令来查看端口状态:
netstat命令:
netstat -tuln该命令用于显示当前系统的网络连接、监听端口和网络统计信息。参数说明:
-t:显示TCP协议相关的连接和监听端口。-u:显示UDP协议相关的连接和监听端口。-l:仅显示监听状态的端口。-n:以数字形式显示端口和IP地址,而不进行域名解析。ss命令:
ss -tuln该命令也用于显示当前系统的网络连接、监听端口和网络统计信息。参数说明:
-t:显示TCP协议相关的连接和监听端口。-u:显示UDP协议相关的连接和监听端口。-l:仅显示监听状态的端口。-n:以数字形式显示端口和IP地址,而不进行域名解析。这些命令会列出当前系统上正在监听的端口以及与其他主机建立的连接。可以根据需要选择合适的命令,并结合其他参数进行进一步筛选和过滤。
6.结构体中->和.的区别
在C语言中,结构体(struct)是一种自定义的数据类型,用于组合多个不同类型的变量成为一个单独的实体。当我们定义一个结构体变量后,可以使用两种不同的运算符来访问结构体成员,即
->和.。
->运算符:
->运算符用于访问指向结构体的指针所指向的成员。- 当我们有一个指向结构体的指针时,可以使用
->运算符来访问结构体成员。- 语法:
指针变量->成员名- 示例:
struct Person {char name[20];int age; };struct Person p; struct Person *ptr = &p;ptr->age = 25; // 使用->访问指针所指向的结构体成员
.运算符:
.运算符用于访问结构体变量的成员。- 当我们有一个结构体变量时,可以使用
.运算符来访问结构体成员。- 语法:
结构体变量.成员名- 示例:
struct Person {char name[20];int age; };struct Person p;p.age = 25; // 使用.访问结构体变量的成员总结:
->运算符用于访问指向结构体的指针所指向的成员。.运算符用于访问结构体变量的成员。- 使用
->运算符时,操作数必须是指向结构体的指针。- 使用
.运算符时,操作数必须是结构体变量本身。需要注意的是,如果结构体变量是通过动态内存分配(如使用
malloc函数)获得的,那么我们需要使用->运算符来访问结构体的成员。而如果结构体变量是在栈上声明的,那么我们可以使用.运算符或->运算符来访问结构体的成员,具体取决于我们使用的是结构体变量还是指向结构体的指针。
相关文章:
嵌入式面试常见问题(一)
目录 1.什么情况下会出现段错误? 2.swap() 函数为什么不能交换两个变量的值 3.一个函数有六个参数 分别放在哪个区? 4.定义一个变量,赋初值和不赋初值分别保存在哪个区? 5.linux查看端口状态的命令 6.结构体中->和.的区…...
docker批量删除本地镜像
docker rmi -f $(docker images|grep docker|awk {print $3})...
数据结构(一)—— 数据结构简介
文章目录 一、基本概念和术语?1.1、数据1.2、数据元素1.3、数据项(属性、字段)1.4、数据对象1.5、数据结构 二、逻辑结构和物理结构(存储结构)2.1、逻辑结构1、定义2、分类(线性结构和非线性结构࿰…...
Ubuntu输入正确密码重新跳到登录界面
Ubuntu输入正确密码重新跳到登录界面 问题描述 输入正确的密码登录后闪一下又回到锁屏界面 输入正确的密码后还是回到这个界面 产生的原因 /etc/profile或者/etc/enviroment出现了问题,导致无法正常登录 该错误产生的原因不止一个 这里是因为/etc/profile或者/etc/enviromen出…...
TCP/IP(十四)流量控制
一 流量控制 说明: 本文只是原理铺垫,没有用tcpdumpwiresahrk鲜活的案例讲解,后续补充 ① 基本概念 流量控制: TCP 通过接受方实际能接收的数据量来控制发送方的窗口大小 ② 正常传输过程 背景:1、客户端是接收方,服务端是发送方 --> 下载2、假设接收窗…...
CSS网页标题图案和LOGO SEO优化
favicon图标 将网页的头名字旁边放入一个图案 想将想要的图案切成png图片 然后把png图片转换成ico图案可以借助进行访问 将语法引用到head里面 SEO译为搜索引擎优化。是一种利用搜索引擎的规则提高网站有关搜索引擎的自然排名的方式 SEO的目的是对网站进行深度的优化&…...
机器人制作开源方案 | 双轮提升搬运小车
1. 功能描述 双轮提升搬运小车是一种用于搬运和移动物体的机械设备,它通常采用双轮驱动和提升装置。一般具备以下特点: ① 双轮驱动:该小车配备两个驱动轮,通过电动机或其它动力源驱动,提供足够的动力和扭矩࿰…...
5G安卓核心板-MT6833/MT6853核心板规格参数
随着智能手机的不断发展,芯片技术在推动手机性能和功能方面发挥着关键作用。MT6833和MT6853安卓核心板是两款高度集成的基带平台,为LTE/5G/NR和C2K智能手机应用提供强大的处理能力和多样化的接口。 这两款安卓核心板都集成了蓝牙、FM、WLAN和GPS模块&…...
信创之国产浪潮电脑+统信UOS操作系统体验4:visual studio code中怎么显示中文
☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、引言 今天在vscode中打开以前的一段C代码,其中的中文显示为乱码,如图所示: 而在统信文本编辑器打开是正常的,打开所有菜单,没有找到相关配置…...
Magica Cloth 使用方法笔记
Magica Cloth 使用方法笔记 效果展示: 参考资料: 1、官方使用文档链接: インストールガイド – Magica Soft 2、鱼儿效果案例: https://www.patreon.com/posts/69459293 3、插件工具链接:版本() 目录:…...
c++ 学习之 强制类型转换运算符 const_cast
看例子怎么用 int main() {int a 1;int* p a;// 会发生报错// 如果学着 c的风格类型转换int* pp (int*)a;*pp 1; // 编译不报错,但是运行报错// const_castconst int n 5;const std::string s "lalal";// const cast 只针对指针,引用&…...
Ceph相关部署应用(博客)
这里写目录标题 Ceph相关部署应用一.存储基础1.单机存储设备2.商业存储解决方案3.分布式存储(软件定义的存储 SDS) 二.Ceph 简介1.Ceph2.Ceph 优势3.Ceph 架构4.Ceph 核心组件5.OSD 存储后端6.Ceph 数据的存储过程7.Ceph 版本发行生命周期8.Ceph 集群部署…...
基于 ceph-deploy 部署 Ceph 集群 超详细
Ceph part1 一、存储基础1.1 单机存储设备1.2 单机存储的问题1.3 单机存储问题的解决方案1.3.1 商业存储解决方案1.3.2 分布式存储(软件定义的存储 SDS) 二、分布式存储2.1 常见的分布式存储2.2 分布式存储的类型 三、Ceph概述3.1 Ceph简介3.2 Ceph 优势…...
做一个物联网的后台程序与数据库设计
数据库部分 先设计一个简单的数据库。表结构如下: sql语句如下: SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0;-- ---------------------------- -- Table structure for realtimedata -- ---------------------------- DROP TABLE IF EXISTS `realtimedata`...
Pytorch深度学习—FashionMNIST数据集训练
文章目录 FashionMNIST数据集需求库导入、数据迭代器生成设备选择样例图片展示日志写入评估—计数器模型构建训练函数整体代码训练过程日志 FashionMNIST数据集 FashionMNIST(时尚 MNIST)是一个用于图像分类的数据集,旨在替代传统的手写数字…...
uniapp 返回上一步携带参数
1. 下一步 // 返回上一页setTimeout(() > {let pages getCurrentPages();let prevPage pages[pages.length - 2];prevPage.$vm.schoolName this.formList;uni.navigateBack({delta: 1});}, 1000) 2. 返回上一步, 携带参数 // 获取下一步返回的数据onShow() {let pages …...
软件工程与计算总结(七)需求文档化与验证
目录 一.文档化的原因 二.需求文档基础 1.需求文档的交流对象 2.用例文档 3.软件需求规格说明文档 三.需求文档化要点 1.技术文档协作要点 2.需求书写要点 3.软件需求规格说明文档属性要点 四.评审软件需求规格说明文档 1.需求验证与确认 2.评审需求的注意事项 五…...
MySQL锁概述
数据库锁是一种机制,用于管理并发访问数据库的方式。当多个用户或事务同时访问数据库时,可能会导致数据不一致或冲突的问题。数据库锁的作用是确保数据的一致性和完整性,同时允许多个用户并发地访问数据库。 需要注意的是,加锁是消…...
【Ceph Block Device】块设备挂载使用
文章目录 前言创建pool创建user创建image列出image检索image信息调整image大小增加image大小减少image大小 删除image从pool中删除image从pool中“延迟删除”image从pool中移除“延迟删除的image” 恢复image恢复指定pool中延迟删除的image恢复并重命名image 映射块设备格式化i…...
Arbitrum Stylus 的工作原理
理解 Arbitrum 如何协调 EVM 和 WASM 的共存是至关重要的。这不仅仅是拥有两个独立的引擎;这是一种增强两者优势的协同关系。 Arbitrum 的独特架构允许 EVM 和 WASM 之间进行无缝和同步的操作,这要归功于其统一的状态、跨 VM 调用和兼容的经济模型。 用…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
