1、全局静态变量,局部静态变量 存在内存哪个区域?什么时候开始初始化的?
答:它们存储在静态存储区。如果已经初始化了非0值时,存储在.data 段。如果未初始化,或者默认初始化为0时,存储在.bbs 段。
静态初始化:是指用常量对变量进行初始化。其中未赋初值及初值为0的放在bss段,其他放在data段。静态初始化在程序加载时完成。
动态初始化:是指需要经过函数调用才能完成的初始化,比如说:int a=foo(),或者复杂类型的初始化(需要调用构造函数)等。
对于全局或者类的静态成员变量,是在main()函数执行前由运行时调用相应的代码进行初始化的。而对于局部静态变量,是在函数执行至此初始化语句时才开始执行的初始化。
2、编译与链接的详细步骤是什么?
答:C++ 程序的编译与链接是将源代码转换为可执行文件的过程,通常分为以下几个主要步骤:预处理、编译、汇编和链接。以下是每个阶段的详细步骤:
1)预处理(Preprocessing)
预处理阶段处理源代码中的预处理指令(如 #include, #define 等),生成预处理后的代码。
主要任务:
-
宏替换:用宏定义的值替换代码中的宏标识符。例如:#define PI 3.14
会将所有
PI替换为3.14。 -
头文件展开:将
#include指令包含的头文件内容插入到源文件中。 -
条件编译:处理
#ifdef,#ifndef,#if等条件编译指令,保留符合条件的代码。 -
注释删除:从代码中移除所有注释。
结果: g++ -E main.cpp -o main.i
- 输出文件是一个纯粹的
.i文件,包含预处理后的源代码
2)编译(Compilation)
编译器将预处理后的代码转换为汇编代码。
主要任务:
- 语法检查:检查代码的语法是否正确。
- 词法分析:将代码分解为单词或记号(Tokens)。
- 语法分析:根据语言的语法规则生成语法树(AST,抽象语法树)。
- 中间代码生成:将语法树转换为中间表示形式。

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



