嵌入式笔试刷题(第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 内核、以及实用电路知识等内容。

全部评论
点赞 回复 分享
发布于 04-25 21:42 山西
mark一下
点赞 回复 分享
发布于 04-25 17:32 黑龙江

相关推荐

不愿透露姓名的神秘牛友
04-11 10:17
星网锐捷 嵌入式软件开发 13.5*13 硕士211
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客企业服务