第一次面试的题

嵌入式软件的面试重要区分点

举例说明static的三种用途对应的解释

  • 隐藏。当我们同时编译多个文件时,所有未加static的全局变量和函数都具有全局可见性。为了防止出错,需加上static。
  • 保持变量的内容持久。.存储在数据区的变量,和全局便量具有相同的性质:生命周期和程序一样长,不会被释放,唯一不同的是变量的作用域有一定的区别。
  • 默认初始换为0.当变量未初始化时,加上static可以让系统自动给该变量一个0的值。

举例说明关键字volatile的三种作用:对应解释(易变得)

  • 在C语言有关书上写的有关volatile。简单的说:volatile关键字会影响编译器编译的结果,用volatile声明的变量表示该变量随时都可以发生变化,该变量的有关运算,不要进行编译优化,以免出错。
  • 1)中断服务程序中修改的供其它程序检测的变量,需要加volatile;
  • 2)多任务环境下多任务间共享的标志,应加volatile;
  • 3)存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;

堆与栈有何区别? 对应的大佬解释

  • 1)数据结构的堆与栈
    ①栈是一种可以实现“先进后出”(或者称为“后进先出”)的存储结构。
    ②堆则是一种经过排序的树形数据结构,常用来实现优先队列等。堆是一种特殊的完全二叉树。 其中,节点是从左到右填满的,并且最后一层的树叶都在最左边(即如果一个节点没有左儿子,那么它一定没有右儿子);每个节点的值都小于(或者都大于)其子节点的值。
  • 2)内存内容分配的堆与栈
    ①分配与释放方式不同
    ⑴栈内存是由编译器自动分配与释放的,它有两种分配方式:静态分配和动态分配。
    ⑵堆内存完全是由程序员手动申请与释放的。(malloc函数等)
    ②分配碎片的问题
    ⑴对堆来说,内存空间的不连续。 频繁分配和释放(malloc / free)不同大小的堆空间势必会造成,从而造成大量碎片,导致程序效率降低;
    ⑵对栈来讲,内存空间是连续,则不会存在这个问题。
    ③分配的效率
    ⑴栈是机器系统提供的数据结构,计算机会在底层对栈提供支持。栈的分配效率要高一些。
    ⑵堆则不同,它是由 C/C++ 函数库提供的,它的机制也相当复杂。堆的分配效率要低一些。
    ④申请的大小限制 : 堆的生长方向
    ⑴堆内存的申请大小受限于计算机系统中有效的虚拟内存。栈的增长方向是由高地址向低地址方向增长。
    ⑵栈则不同,它是一块连续的内存区域,其地址的增长方向是向下进行的,向内存地址减小的方向增长。
    ⑤存储的内容
    ⑴对栈而言,一般用于存放函数的参数与局部变量等。
    ⑵对堆而言,具体存储内容由程序员根据需要决定存储数据。
    Little Endian和Big Endian有何区别? 对应的解
    大端模式(big endian):数据的高位字节保存在内存的低地址中,而低位字节保存在内存的高地址中。
    小端模式(little endian):数据的高位字节保存在内存的高地址中,而低位字节保存在内存的低地址中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值