栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

嵌入式面试总结

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

嵌入式面试总结

1:堆和栈的区别

        ①栈的空间由系统自动分配或释放,堆的空间手动分配或释放

        ②栈的空间有限,堆上有很大的自由存储空间,malloc分配的空间在堆上,使用完后需要释放

2:static关键词的作用

①修饰局部变量,将其生命周期改为与全局变量相同,作用域不变

②修饰全局变量时, 当一个源程序由多个源文件组成时,将其作用域从整个源程序改为该源文件

③修饰函数时,表明该函数作用域为该文件内 

3:volatile关键字的作用

①与const关键词对立,表示“可变的”,修饰变量时表明该变量需要从内存单元中读取,不能直接从寄存器中拷贝,

②常用于并行设备的硬件寄存器,中断服务子程序访问到的变量,多线程之间被几个任务共享变量

4:进程和线程的区别

①进程是系统资源分配的最小单位,线程是程序执行的最小单位

②进程拥有自己独立的地址空间,每次启动一个进程系统会为它分配数据段、代码段、堆栈段,而线程与进程共享相同资源,仅仅拥有自己的局部变量(栈),共享全局变量和堆等,因此cpu开销线程明显小于进程

③线程之间的通信很明显,但要注意互斥和同步,进程间通信用到IPC,主要有FIFO,socket,管道pipe,信号量

④多进程程序不容易崩溃,多线程程序会因为某一线程掉线而崩溃

5:实现strcpy函数
char *strcpy(char *strDest, const char *strSrc)
{
    if (!(strDest && strSrc))
        return NULL;
    char *ret = strDest;
    while ((*strDest++ = *strSrc++)!='');
    return ret;
}
6:引用和指针的区别


(1). 指针是一个实体,而引用仅是个别名; 

(2). 引用使用时无需解引用(*),指针需要解引用;

(3). 引用只能在定义时被初始化一次,之后不可变;指针可变;

(4). 引用没有 const,指针有 const,const 的指针不可变;

(5). 引用不能为空,指针可以为空;

(6). “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof指针”得到的是指针本身(所指向的变量或对象的地址)的大小;

(7). 指针和引用的自增(++)运算意义不一样;

7:malloc的用法和注意点

该函数用于分配堆上的n个字节,并返回指向这块内存的指针,如果分配失败则返回NULL;

注意:①申请了内存空间之后,必须检查是否申请成功

②当不再使用申请的内存,必须进行释放,且释放后必须将指针置NULL,否则会导致野指针

③malloc和free配套使用,申请不释放为内存泄漏,释放多次,会导致错误

④malloc的类型是void*,使用时需要将其强制转换为需要的类型指针

8:C和C++的区别

9:C语言的编译过程 10:排序

 

①快排,先从数列中取出一个数作为基准值;分区过程中,将比这个数大的数全放在它的右边,比这个数小的全放在它的左边;再对左右分区重复第二步,直到各区间只有一个数。

10:linux驱动相关知识

11:嵌入式硬件协议

I2C,SPI,GPIO,

12:自旋锁和互斥锁,读写锁

自旋锁可以在中断中使用,互斥锁会引起阻塞

13:系统调用有哪些,执行过程是怎样的?

14:大小端问题,0x12345678在小端模式存储方式是?

78 56 34 12

15:信号④是用来干嘛的?

用来同步和互斥,如果初始值为0,则用于同步,如果初始值非0,则用于互斥

互斥是死锁的必要条件之一

为什么要字节对齐

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/588325.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号