嵌入式模拟面试拷打【7】
发现上次更新还是九月份,想一想也确实这一个月很少遇到八股盛宴的面试了,今天回顾一下,发现很多题目都已经不再熟悉,果然,死记硬背的八股,终究不是自己的。
1. C++ 程序编译过程
C++ 程序的编译过程分为四个主要步骤:
- 预处理:处理
#include
、#define
等指令,生成预处理后的代码。此步骤会进行宏替换、条件编译等。 - 编译:将预处理后的代码翻译为汇编语言。这一阶段进行语法分析、语义分析等。
- 汇编:将汇编代码转换为机器码,生成目标文件(
.obj
或.o
文件)。 - 链接:将多个目标文件及其依赖的库文件链接为最终的可执行文件,解决符号引用并合并代码段。
2. C++ 内存管理
C++ 提供两种内存管理方式:
- 静态内存分配:在编译时分配,大小和生命周期固定,适用于全局变量和局部静态变量。
- 动态内存分配:通过
new
和delete
操作符在堆上动态分配和释放内存。动态内存允许在运行时决定内存大小,但需要手动管理,避免内存泄漏。
3. 栈和堆的区别
- 栈:自动管理,函数调用时自动分配和释放,速度快但大小有限,适合局部变量和函数调用。
- 堆:手动管理,适用于动态内存分配。灵活但较慢,容易导致内存泄漏或碎片化。
4. 变量的区别
- 局部变量:在函数或代码块中定义,生命周期在函数结束时终止。
- 全局变量:在所有函数外部定义,生命周期随程序运行期存在,作用域为整个文件。
- 静态变量:局部静态变量在函数内部定义,但生命周期贯穿整个程序。全局静态变量仅在定义文件可见。
- 动态变量:通过
new
分配,生命周期由程序员管理,需手动释放。
5. 全局变量定义在头文件中的问题
将全局变量定义在头文件中会导致在多个源文件中重复定义同一变量,产生链接错误。应将全局变量的定义放在一个源文件中,并在头文件中使用 extern
声明。
6. 单继承与多继承的虚函数表结构
- 单继承:每个类都有一个虚函数表(vtable),包含该类及其父类的虚函数指针。对象中有一个指向该表的虚表指针(vptr)。
- 多继承:每个基类部分都有自己的虚函数表,派生类对象中包含多个虚表指针,分别指向不同基类的虚函数表。
7. 内存对齐
内存对齐是指数据在内存中的地址需满足特定倍数的要求,以提高内存访问效率。未对齐的数据访问可能导致性能下降和多次内存访问。
8. 什么是内存泄漏
内存泄漏指分配的内存未被释放,导致
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式八股/模拟面试拷打 文章被收录于专栏
一些八股模拟拷打Point,万一有点用呢