嵌入式面试常见问题(一)
目录
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 调用和兼容的经济模型。 用…...

nextjs构建服务端渲染,同时使用Material UI进行项目配置
一、创建一个next项目 使用create-next-app来启动一个新的Next.js应用,它会自动为你设置好一切 运行命令: npx create-next-applatest 执行结果如下: 启动项目: pnpm dev 执行结果: 启动成功! 二、安装Mater…...

Java 使用 Easyexcel 导出大量数据
读Excel | Easy Excel 1、 我遇到的数据量超级大,使用传统的POI方式来完成导入导出很明显会内存溢出,并且效率会非常低;2、 数据量大直接使用select * from tableName肯定不行,一下子查出来300w条数据肯定会很慢;3、 …...

高效防汛决策:山海鲸可视化系统助力城市防洪
随着全球气候的变化,自然灾害如洪水、台风等频发,防范洪水成为城市管理者和居民们亟待解决的重要问题。 洪水的威胁 洪水是自然界的杀手之一,不仅会造成大量的财产损失,还可能危害人们的生命安全。因此,预测、监测和有…...

易点云CFO向征:CFO不能只讲故事,价值创造才是核心
作者 | 曾响铃 文 | 响铃说 在今年6月初,也是易点云上市6天后,《巴伦周刊》正式启动评价“2023港美上市中国企业CFO精英100”的活动。 时间来到9月,评价揭秘,易点云CFO向征成功入选,被评为“年度最具成长潜力CFO”…...

【计算机网络】poll | epoll
文章目录 1. pollpoll函数参数解析代码解析PollServer代码 poll 特点 2. epoll认识接口epoll_createepoll_ctlepoll_wait 基本原理红黑树就绪队列 1. poll poll函数参数解析 输入 man poll poll的第一个参数是文件描述符 poll的第二个参数为 等待的多个文件描述符(fd)数字层面…...

C++设计模式_07_Bridge 桥模式
文章目录 1. 动机(Motivation)2. 代码演示Bridge 桥模式2.1 基于继承的常规思维处理2.2 基于组合关系的重构优化2.3 采用Bridge 桥模式的实现 3. 模式定义4. 结构(Structure)5. 要点总结 与上篇介绍的Decorator 装饰模式一样&…...

[JAVA版本] Websocket获取B站直播弹幕——基于直播开放平台
教程 B站直播间弹幕Websocket获取 — 哔哩哔哩直播开放平台 基于B站直播开放平台开放且未上架时,只能个人使用。 代码实现 1、相关依赖 fastjson2用于解析JSON字符串,可自行替换成别的框架。 hutool-core用于解压zip数据,可自行替换成别的…...

第一个 Python 程序
三、第一个 Python 程序 好了,说了那么多,现在我们可以来写一下第一个 Python 程序了。 一开始写 Python 程序,个人不太建议用专门的工具来写,不方便熟悉语法,所以这里我先用 Sublime Text 来写,后期可以…...

广告牌安全监测,保障户外广告牌的安全与稳定
随着城市的发展和现代化,广告牌已经成为城市风景的一部分。然而,随之而来的是广告牌安全问题,因为它们暴露在各种天气和环境条件下,一旦掉落,可能对人们的生命和财产造成威胁。广告牌安全监测有效的解决了这一问题&…...

分类预测 | MATLAB实现KOA-CNN-GRU开普勒算法优化卷积门控循环单元数据分类预测
分类预测 | MATLAB实现KOA-CNN-GRU开普勒算法优化卷积门控循环单元数据分类预测 目录 分类预测 | MATLAB实现KOA-CNN-GRU开普勒算法优化卷积门控循环单元数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现KOA-CNN-GRU开普勒算法优化卷积门控循环单…...