✅作者简介:大家好我是:嵌入式基地,是一名嵌入式工程师,希望一起努力,一起进步!
📃个人主页:嵌入式基地
🔥系列专栏:嵌入式习题专栏
微信公众号:嵌入式基地
嵌入式软件工程师面试题(六)
1、进程和线程的区别?
进程是资源分配的最小单位,线程是CPU调度的最小单位。一个进程可以包含多个线程,所以进程要比线程消耗更多的计算机资源。每个进程都有单独的地址空间,而同一进程内的线程共享进程的地址空间。
2、C语言中,static关键字的作用?
在C中,static主要定义全局静态变量、定义局部静态变量、定义静态函数。
1、定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点。
a.在全局区分配内存。
b.如果没有初始化,其默认值为0. c.该变量在本文件内从定义开始到文件结束可见。
2、定义局部静态变量:在局部变量前面加上关键字static,其特点如下:
a.该变量在全局数据区分配内存。
b.它始终驻留在全局数据区,直到程序运行结束。
c. 其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束
3、堆和栈得区别?
1、栈由系统自动分配,而堆是人为申请开辟;
2、栈获得的空间较小,而堆获得的空间较大;
3、栈由系统自动分配,速度较快,而堆一般速度比较慢;
4、栈是连续的空间,而堆是不连续的空间。
4、什么是野指针,产生的原因是什么?
野指针是指向位置随机的、不正确的指针。野指针产生的原因有:
1、创建指针时没有对指针进行初始化,导致指针指向一个随机的位置;
2、释放指针指向的内存后没有置空,从而指向垃圾内存;
5、DMA有什么用?
MA是在专门的硬件( DMA)控制下,实现高速外设和主存储器之间自动成批交换数据尽量减少CPU干预的输入/输出操作方式。主要作用就是减少CPU的负担。
6、进程间通信方法
管道 ,包括有名管道和无名管道。
信号量。
共享内存
消息队列
本地套接字
7、程序中的内存分配方法
内存为程序分配空间有四种分配方式:
1、连续分配方式
2、基本分页存储管理方式
3、基本分段存储管理方式
4、段页式存储管理方式
8、c语言volatile作用和用法?
volatile关键字用来阻止编译器认为的无法“被代码本身”改变的代码进行优化。
- 如在C语言中,volatile关键字可以用来提醒编译器它后面所定义的变量随时有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。
- 如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。
9、编译有几个阶段 每个阶段做什么事情
1、词法分析阶段:读入源程序,对构成源程序的字符流进行扫描和分解,识别出单词
2、 语法分析阶段:机器通过词法分析,将单词序列分解成不同的语法短语,确定整个输入串能够构成语法上正确的程序。
3、语义分析阶段:检查源程序上有没有语义错误,在代码生成阶段收集类型信息
4、中间代码生成阶段:在进行了上述的语法分析和语义分析阶段的工作之后,有的编译程序将源程序变成一种内部表示形式
5、代码优化:这一阶段的任务是对前一阶段产生的中间代码进行变换或进行改造,目的是使生成的目标代码更为高效,即省时间和省空间
6、目标代码生成:这一阶段的任务是把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码
10、内核申请内存vmalloc和kmalloc的区别是什么?
1,vmalloc分配的一般为高端内存,只有当内存不够的时候才分配低端内存;kmallco从低端内存分配。
2,vmalloc分配的物理地址一般不连续,而kmalloc分配的地址连续,两者分配的虚拟地址都是连续的;
3,vmalloc分配的一般为大块内存,而kmaooc一般分配的为小块内存,(一般不超过128k);