C 内存管理
1. 内存管理
1.1 数据存放
1.1.1 bss 段(未初始化的全局变量)
bss 段用来存放没有初始化和初始化为0的全局变量
特点:
- 只占运行时的内存空间,而不占用文件空间
- 作为存放全局,贯穿整个程序的运行周期
1.1.2 data 段(初始化过的全局变量)
data 段用于存放初始化非零的全局变量
特点:
- 既占文件空间,又占运行时的内存空间
- 作为存放全局变量,贯穿整个程序的运行周期
1.1.3 rodata 段(常量数据)
ro代表 read only,rodata 用来存放常量数据。
特点:
- rodata 是在多个线程之间共享的,提高运行效率
- rodata 在只读的内存页面中是受保护的,任何试图对他的修改都会被及时发现
- 字符串会被编译器自动放到 rodata 中,其他数据放到 rodata 中,只需要加 const 关键字修饰
1.1.4 test 段(代码)
text 段存代码和部分整数常量
1.1.5 stack (栈)
栈主要用于存放临时变量和函数参数。实现函数的递归!!!
通常情况下,栈是向下(低地址)增长的:每向栈内 push 一个元素,栈顶向低地址扩展,每从栈中 pop 一个元素,栈顶就向高地址回退
1.1.6 heap(堆)
堆是最灵活的一种内存,生命周期完全由使用者控制。
C语言可以通过 malloc 和 free