嵌入式校招面试题一(C语言)

// 最近论文也提交了,等答辩中,也没啥事了,总结一些嵌入式校招面试题吧。

// 写在开头,面试主要是围绕你的简历来问,你写了啥面试官问啥,项目部分必问,经常会问,你这个项目遇到了哪些问题以及如何解决的,建议事先准备一下。

// 这是第一部分,主要是C语言方面的,后续还有操作系统(Linux)、网络、数据结构、单片机之类方面,还有些乱七八糟的。

// 答案有不对的地方欢迎指正。

1、static的作用:

1、static声明全局变量:存放于.data段(已初始化)或者.bss段(未初始化)内,只在定义它的源文件内有效,其他源文件无法访问它。
2、static声明局部变量:(1)放在.data段,在整个生命周期中存在。(2)不能被其他的函数和源文件访问。(3)以后每次调用静态局部变量的时候都用上次调用后的值。
3、static声明函数:解决不同原文件中函数同名的问题,文件中被static声明的函数对其他文件不可见。

2、volatile作用:

1、编译器不要对其进行优化:例如往某寄存器先写1,再写2。不要觉得先写1好像是冗余代码,优化成直接写2。
2、每次都从其地址中读数据:避免从cache中读数据,避免cache中数据没更新等问题。

3、常量指针、指针常量:

1、指针常量:(int *const p)指针自身的值是一个常量,不可改变。在定义的同时必须初始化。
2、常量指针:(const int *p, int const *p)指向“常量”的指针。指针指向的内容不可改变。

4、malloc的底层实现

对于小于128KB的请求来说,它会在现有的堆空间里,按照堆分配算法为其分配一块空间并返回(空闲链表);对于大于128KB的请求,他会使用mmap函数为其分配一块匿名空间增加到堆空间,然后在这块匿名空间中为用户分配空间。当然我们直接用mmap也可以轻易实现malloc函数(直接用mmap映射匿名空间),但是mmap只能以页的整数倍映射,对于小空间的分配会很浪费。
// Linux驱动层是kmalloc:不同的对象分配不同的高速缓存,高速缓存中又被划分为slab,slab一般是一个页(buddy算法,只能取2^n页,一般n为0),在slab中为具体对象进行分配/回收。其中kmalloc就建立在slab层上,使用了一组通用高速缓存。

5、malloc之后free(内存泄漏)

动态分配的内存,使用结束后需要用free释放掉,不然会造成内存泄漏。内存泄漏可以通过重启解决。

6、指针的指针

可以采用如下理解方式:

int a =100;
int *p1 = &a;
int **p2 = &p1;

7、空指针与野指针

(1)空指针:
空类型指针就是void *类型的指针,表示这是一个指针,和地址值有关,但不知道存储在此地址上的对象的类型,在取空类型指针所指向的值的时候,应将空类型指针转换为对应的指针类型
(2)野指针:
不知道指向哪里的指针,如char *p; 此时就不知道p指向哪里。

8、运算符优先级(笔试)

  • 4
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值