一、程序运行之前的步骤(预处理、编译、汇编、链接)
1)预处理:宏定义展开、头文件展开、条件编译,这里并不会检查语法
2)编译:检查语法,将预处理后文件编译生成汇编文件
3)汇编:将汇编文件生成目标文件(二进制文件)
4)链接:将目标文件链接为可执行程序
二、可执行程序(size test)
![827799df14cdb32e74ebb22ee16204c8.png](https://img-blog.csdnimg.cn/img_convert/827799df14cdb32e74ebb22ee16204c8.png)
栈区和堆区都是在运行的时候才有,运行之前只有代码区、(数据区、未初始化数据区)通常统称为静态区或者全局区。
代码区:存放 CPU 执行的机器指令。通常代码区是可共享的(即另外的执行程序可以调用它);代码区是只读的。
三、运行时
1、栈区(stack)
栈是一种先进后出的内存结构,由编译器自动分配释放,存放函数的参数值、返回值、局部变量等。在程序运行过程中实时加载和释放,因此,局部变量的生存周期为申请到释放该段栈空间。
2、堆区(heap)
堆是一个大容器,它的容量要远远大于栈,但没有栈那样先进后出的顺序。用于动态内存分配。堆在内存中位于BSS区和栈区之间。一般由程序员分配和释放&#x