嵌入式相关的知识
语言
-
static 关键字的作用,以及如何使用?
能够改变变量和函数的作用域以及生命周期,对于局部变量而言它可以延长生命周期并保持其值;对于全局变量、函数而言限制了可见范围。 -
const 关键字的作用
用于定义常量、引用等,const 修饰的数据是不可修改的。int *const ptr = &a; 常量指针,指针指向的地址不可变。 const int *ptr = &a; 指向常量的指针,指针指向变量的值不可更改。编译阶段也可做优化提高性能。 -
new 与 malloc 的区别
在最新版的C++中,new 会在自由存储区分配内存,malloc 在堆上分配内存;new 会自动调用构造函数创建对象,malloc 不会;new 是类型安全的,在使用时指定了类型编译器会检查,malloc 的类型需程序员自己指定且不会检查;如果申请失败,new 会抛出异常,malloc 会返回 NULL需程序员自己检查失败的情况并做处理。 -
静态链接与动态链接
在编译阶段,静态链接器会将程序所需的库文件中的所有目标代码直接复制并合并到可执行文件中。
编译时并不将库代码合并到可执行文件中,而是仅在可执行文件中保留库函数的引用信息。当程序运行时,操作系统负责加载相应的动态库到内存,并解析这些引用。
静态链接库不易于后期的维护,生成的可执行文件体积大,编译速度慢。
动态链接库易于维护,生成的可执行文件体积小,编译速度快。
静态链接方式减小了运行依赖,可独立运行,可移植。
动态链接方式需要安装动态库才能运行。 -
预编译阶段做什么?
宏替换:将源代码中的宏定义替换为对应的值或代码片段。
处理条件编译:根据条件编译指令,决定编译哪些源代码。
处理头文件:处理#include指令,将指定的头文件内容插入到当前源文件中。
去除注释:去除源代码中的注释。 -
宏展开与内联函数的区别
安全性: 宏展开不会检查函数参数和返回值,内联函数会检查,所以更安全。
替换的时间不同: 宏展开是在编译预处理阶段完成替换,内联函数在编译时替换。 -
函数调用与内联函数的区别,既然能提高效率,将函数内联是不是更好?
函数调用的方式开销更大,效率较低(内联不用考虑参数压栈,函数返回,以及相关的内存分配等)。
对于体积小的函数,内联函数会更快,反之会让程序变得臃肿,编译时间更长,影响性能。 -
typedef和define有什么区别?
define 是编译预处理指令,在预处理时进行简单而机械的字符串替换,不做正确性检査。
typedef 它在编译时处理,具有类型检查的功能。
功能:typedef用来定义类型的别名,#define用来定义宏,定义常量,条件编译等。
作用域不同:typedef 有作用域的限制 define 没有作用域限制。 -
volatile关键字的作用
防止编译器优化,它会告诉编译器不要对存储在这个地址的数据进行假设,每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据 -
什么是大端和小端?
大端:高地址存低字节,低地址存高字节
小端:低地址存低字节,高地址存高字节
操作系统
计算机网络
算法 & 数据结构
loading …