嵌入式笔试刷题(第17天)
*1. char tmp = "123"; 这个字符串分配在堆还是栈上?什么时候释放?
✅ 解析:
"123"
是一个 字符串常量,存储在 只读数据段(.rodata) 中,而不是堆也不是栈。
tmp
是一个局部指针变量,保存在栈上,但它指向的内容 "123"
是编译期分配的静态存储区。
✅ 内存释放:
字符串常量的内存不会被释放,它在程序运行期间一直存在。
*2. 在32位系统下,char [5][6] 占多少字节?
✅ 解析:
char *[5][6]
表示一个 5×6 的指针数组,共有 30 个 char*
指针。
在 32 位系统中,每个指针占 4 字节。
总内存 = 5 × 6 × 4 = 120 字节
3. 简要描述 TCP/IP 协议架构层次及主要功能
✅ 协议分层:
应用层 |
HTTP、FTP 等 |
提供网络应用服务 |
传输层 |
TCP、UDP |
端到端数据传输,保证可靠性等 |
网络层 |
IP、ICMP |
路由与寻址 |
网络接口/链路层 |
Ethernet 等 |
数据帧传输,硬件接口驱动 |
4. 路由器和以太网交换机的区别及工作层级
协议层级 |
网络层(第三层) |
数据链路层(第二层) |
作用 |
实现跨网段通信、路由选择 |
实现局域网内设备转发 |
转发依据 |
IP 地址 |
MAC 地址 |
功能复杂度 |
高(支持NAT、防火墙等) |
低(基于 MAC 表转发) |
5. 分析以下代码运行情况
char buffer[100*1024*1024];
✅ 解析:
- 在 32位系统下,函数局部变量默认分配在 栈上;
100MB
空间远远超过栈大小限制(通常几百 KB~几 MB);- 结果:栈溢出,程序运行时崩溃或异常终止
6. 分析 add 函数的问题
int add(int n, int m) { static int temp = 0; temp += m; temp += n; return temp; }
✅ 问题分析:
temp
是静态变量,多次调用函数不会被重新初始化;- 每次调用会在上次累加的基础上继续累加;
- 如果预期是纯粹的加法运算(),这个实现会引发错误
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式笔试专栏 文章被收录于专栏
本专栏系统整理了嵌入式方向笔试中常见的知识点和高频考题,涵盖基础理论、常用算法、C语言陷阱、操作系统原理、驱动开发、常见外设通信协议(如 I2C/SPI/UART)、RTOS、Linux 内核、以及实用电路知识等内容。