嵌入式面试题(一)

嵌入式面试题(一)

1.静态变量与局部静态变量的区别

  • 存储类别:非零的全局变量,非零的局部静态变量存储在数据段;零初始化的全局变量或者局部静态变量存储在bss段
  • 作用域:静态变量属于内链接,只在当前模块内可以被访问。
  • 生命周期:bss段和数据段的生命周期是永久的,从程序开始到程序结束。
    扩展
变量类型 存储类型 链接属性 作用域 生命周期
局部变量 无链接 代码块作用域{} 临时的,在变量空间代码运行时开辟,运行结束释放
局部静态变量 bss或者数据段 无链接 代码块作用域{} 永久的
全局变量 bss或者数据段 外连接 文件作用域 永久的
静态全局变量 bss或者数据段 内链接 文件内部 永久
malloc申请变量 链接属性根据变量类型 代码块作用域 malloc到free之间
const变量 只读段 -- 根据变量类型 永久的
函数 代码段 外连接 文件作用域 永久

2.C语言调用函数过程中,栈是如何变化的?

  • 调用前的准备:实参入栈,参数从右向左先后入栈;返回地址入栈
  • 函数执行:程序控制流程跳转;保存caller的栈帧指针;为局部变量分配空间;执行计算;销毁局部变量;恢复caller的栈帧指针
  • 控制返回

3.为什么指针都是占四个字节?

C语言的指针变量所占的空间,是一个字的空间。这其实跟机器有关。
如果你使用的是32位的编译器,编译后的指针变量是4个字节。
如果使用的是64位的编译器,编译后的指针变量应该是8字节

4.进程与线程的区别?

  • 进程是系统资源分配的最小单位;线程是程序执行的最小单位,也是处理器调度的基本单位。两者均可并发执行。
  • 进程有自己独立的地址空间,每启动一个进程,系统会为它分配地址空间建立数据表来维护代码段、堆栈段、数据段这种操作非常昂贵;线程是共享进程中数据,使用相同的地址空间,因此CPU切换一个线程的花费比切换一个线程要小。
  • 线程之间通信更加方便,同一线程共享进程下全局变量和静态变量;进程间通信方式要通过IPC方式。
  • 进程切换资源大、效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程。
  • 每个独立进程都有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立运行,必须依赖于应用程序,由应用程序提供多个线程执行程序。

5.进程间通信?

  • 管道。有名管道和无名管道。
  • 信号量。
  • 消息队列
  • 共享内存
  • 套接字

猜你喜欢

转载自www.cnblogs.com/ywx123/p/10229665.html