嵌入式笔试刷题(第19天)
✅ 1. 下列代码:
char *GetStr() { char *tmp = "123"; return tmp; }
请问 tmp 指针所指的内容是分配在堆上还是分配在栈上?其内存会在什么情况下释放?
✅ 答案与解析:
"123"
是一个字符串常量,存储在只读常量区(代码段或.rodata);tmp
是一个局部变量,分配在栈上,但其指向的"123"
是只读静态数据;- 所以内容不是在堆上或栈上分配的,是在静态常量区分配的;
- 此内存在程序结束时由系统释放,或者根本不释放(因为常量区不需要手动管理)。
✅ 2. 在32位系统下,char *[5][6],则该变量占有的内存空间为:_____。
✅ 答案:
char *[5][6]
是一个二维指针数组,共有 5 × 6 = 30 个指针;- 在 32 位系统中,每个指针大小是 4 字节;
- 所以总共占用:30 × 4 = 120 字节
✅ 3. 简要描述 TCP/IP 的协议架构层次,并简单描述每一层次的主要功能。
✅ 答案:
TCP/IP 是四层协议结构:
应用层 |
提供用户访问网络服务的接口 |
HTTP、FTP、DNS |
传输层 |
提供主机间可靠或非可靠的数据传输 |
TCP、UDP |
网络层 |
实现 IP 地址寻址和数据包路由 |
IP、ICMP、ARP |
网络接口层 |
定义硬件设备如何通过物理链路传输数据 |
Ethernet、PPP |
✅ 4. 简单描述路由器和普通以太网交换机的区别,以及各自工作在那一层协议。
✅ 答案:
工作层 |
网络层(第三层) |
数据链路层(第二层) |
根据 |
IP地址转发 |
MAC地址转发 |
作用 |
连接不同网段 |
连接同一局域网 |
功能 |
路由选择、NAT、防火墙 |
转发帧、学习MAC表 |
✅ 5. 分析下面程序在32位 Windows 或 Linux 系统下编译执行,会出现什么情况?
#include <stdio.h> int main(int argc, char *argv[]) { char buffer[100*1024*1024]; printf("hello world\n"); return 0; }
✅ 答案:
- 该程序在栈上分配了 100MB 空间(
char buffer[...]
),而大部分系统栈空间仅 1~8MB; - 因此会导致栈溢出(Stack Overflow),程序崩溃;
- 正确做法是使用
malloc()
在堆上分配。
✅ 6. 分析 add
函数有什么问题?
int add(int n, int m) { static int temp = 0; t
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式笔试专栏 文章被收录于专栏
本专栏系统整理了嵌入式方向笔试中常见的知识点和高频考题,涵盖基础理论、常用算法、C语言陷阱、操作系统原理、驱动开发、常见外设通信协议(如 I2C/SPI/UART)、RTOS、Linux 内核、以及实用电路知识等内容。