一个程序代码一般的内存分布
- .init 启动代码段 调用主函数main
- .text 代码段
程序执行代码存存放在代码段。 - .rodata 只读数据段 常量区
字符串存放在常量区 - .data 已初始化静态数据:
(1)全局变量
(2)static修饰的局部变量
占用可执行文件空间
- .bss 未初始化的静态数据变量 :
(1)全局变量
(2)static局部 未初始化则其数值为零。
.bss段不占用可执行文件空间
- 运行时栈 : 局部变量、函数形参、函数返回值 都放在栈
- 运行时堆: 自定义生命周期 malloc()/calloc()来分配内存,free()来释放
#include "stdio.h"
#include "stdlib.h"
int g1 = 30; // .data数据段
int g2; //.bss 数据段 未初始化默认数值为零
int main(int argc, char const *argv[])
{
int a = 100; //stack 栈
int *p = malloc(20); //heap 堆
static int b = 20; // .data 数据段
static int c; //.bss 数据段
printf("hello\n", ); //标准IO的缓冲区
sleep(1);
fflush(stdout);
return 0;
}
栈、堆、.bss段、.data段存放在RAM中。