当前位置: 首页 > news >正文

【嵌入式C】常见问题

1、goto的使用场景有哪些?并讨论其局限?
(1)常用来跳出死循坏;
(2)在linux开发中,常用于打印错误;
(3)goto在某些使用场合会破坏程序的栈逻辑,有一定的局限性。

2、嵌入式开发中常说的“字节对齐”是什么?
嵌入式开发中常用到的结构体,我们通常用#pragma pack(n),n为2的整数幂来指定对齐方式。

3、堆和栈的区别是什么?
(1)栈的空间是系统自动分配和回收,
堆的空间是用户手动分配回收( malloc,calloc,realloc,free)
(2)栈的空间较小,堆的空间较大
(3)栈的地址空间往地址向下增长,堆的地址空间是由低地址到高地址
(4)栈的存储效率更高

4、使用递归函数易引发什么问题?
(1)递归次数过多,会影响执行效率
(2)递归次数过多,栈区的内存分配有限,易出现栈溢出

5、sizeof()与strlen()的区别是什么?
(1)sizeof是计算能容纳实现所建立的最大对象的字节大小的运算符,参数可以是数组、指针、结构体类型、函数等;
(2)strlen是是返回字符串的长度的功能函数,其参数必须是(char*)字符型指针。

6、谈谈static关键字的作用?
一般嵌入式软件开发的本文件的函数要全部使用static关键字声明,这样是一个好的编程规范。
静态全局变量仅对当前文件可见,其他文件不可访问,其他文件可以定义与其同名的变量,两者互不影响。
静态局部变量在声明时未赋初值,编译器也会把它初始化为0。且静态局部变量存储于进程的全局数据区,即使函数返回,它的值也会保持不变。

6、谈谈const关键字的作用?
(1)在变量初次定义时赋初,并用关键字const修饰,使变量只可访问,不能重新赋值修改变量;
(2)指针变量指向的位置不能被修改。定义时,被 const 修饰的指针变量指针只能在定义时初始化,不能定义之后重新指向新的数据。
(3)修饰的指针变量指向的变量的值不能被修改,但是该指针可以指向其它空间。
(4)指针变量指向的位置不能被修改,并且指针变量指向变量的值也不能被修改。
(5)函数形参可以利用const关键字进行限制,来防止在函数内部修改指针指向的数据。

6、谈谈volatile关键字的作用?
(1)裸机编程时,某变量是指向寄存器中某一特定地址,添加volatile的变量不进行优化处理;
(2)在多线程中修饰共享全局变量和某函数与中断函数共享全局变量时,加上volatile,让编译器不要省略该变量的访问;

7、内存泄漏和内存溢出是指的什么?
(1)内存溢出是指程序申请内存时,没有足够的内存供申请者使用。
(2)内存泄漏是指程序在申请内存后,无法释放已申请的内存空间。
内存泄漏堆积后就会造成内存溢出。

8、简要写一下嵌入式的内存布局?
栈(stack):含有环境变量、命令行参数、局部变量
堆(heap):通常由molloc()、calloc()分配内存,realloc()、free()释放内存。
数据段:
.bss段:未初始化的静态数据
.data段:已初始化的静态数据
.rodata段:常量
代码段:
.text:用户代码
.init段:系统初始化代码

http://www.lryc.cn/news/30960.html

相关文章:

  • [神经网络]Transfomer架构
  • C++之多态 虚函数表
  • AI_Papers周刊:第四期
  • A Simple Framework for Contrastive Learning of Visual Representations阅读笔记
  • mac安装开发工具:clipy、iterm2、go、brew、mysql、redis、wget等
  • DJ1-1 计算机网络和因特网
  • [1.3.3]计算机系统概述——系统调用
  • 【Java开发】JUC进阶 03:读写锁、阻塞队列、同步队列
  • Fragment中获取Activity的一点点建议
  • Java Math类
  • Javascript -- 加载时间线 正则表达式
  • gdb/git的基本使用
  • 信息安全与数学基础-笔记-④二次同余方程
  • Luogu P4447 [AHOI2018初中组]分组
  • 手把手创建flask项目
  • SpringCloud-4_Eureka服务注册与发现
  • 【react全家桶】生命周期
  • 虚拟机安装Windows 10
  • 【CMU15-445数据库】bustub Project #2:B+ Tree(下)
  • leetcode 困难 —— 外星文字典(拓扑排序)
  • ubuntu server 18.04使用tensorflow进行ddqn训练全过程
  • 2023年全国最新二级建造师精选真题及答案14
  • mysql一条语句的写入原理
  • 嵌入式Linux内核代码风格(二)
  • Spring Boot @Aspect 切面编程实现访问请求日志记录
  • 初学者的第一个Linux驱动
  • 7. 拼数
  • Java每天15道面试题 | Redis
  • 13_pinctrl子系统
  • Linux系统对于实施人员的价值