C-程序的组成
堆、栈和静态存储区
栈
- 栈是现代计算机程序中的最为重要的概念之一
- 栈在程序中用于维护函数调用的上下文,没有栈就没有函数,就没有局部变量
- 函数参数、函数的返回地址
- 局部变量、函数调用上下文
- 函数在被调用时,在栈中是以一个栈帧的形式存在的,
- 栈分为升栈和降栈,不同架构,栈是不同的.
T1
堆
- 堆是程序中一块巨大的内存空间,可由程序自由使用, 使用时必须申请
- 堆中被程序申请使用的内存在程序主动释放前将一直有效
- 堆在系统中是以链表的结构进行管理的,
程序中的静态区
- 程序中的静态存储区随着程序的运行而分配空间,直到程序运行结束
- 在程序的编译期静态存储区的大小就已经确定
- 程序静态存储区主要用于保存程序中的全局变量和静态变量
- 与堆和栈不同,静态存储区中的信息最终会被保存可执行程序中
C程序文件(可执行程序)的组成部分
T2 程序的组成
在上图中
- 堆和栈是直到程序运行是才会存在,是程序运行的基础
- File Header 用于告诉操作系统文件是可执行文件,和其他一些与运行相关信息
- .text section 存放程序的可执行代码
- .data section 存放的是那些已经初始化的全局变量和静态变量
- .rodata段 存放程序中的常量值, 如字符串常量
- .bss section 存放的是为初始化的全局变量和静态变量