低地址
- 正文段:代码段,通常是指用来存放 程序执行代码 的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于 只读 ,某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些 只读的常数变量 ,例如字符串常量等。程序段为程序代码在内存中的映射.一个程序可以在内存中多有个副本
- 初始化的数据:函数外已初始化变量的存储空间
- 未初始化的数据:通常将此段称为bss段,函数外的未初始化变量的存储空间
- 堆:通常在堆中进行动态存储分配,它的大小并不固定,可动态扩张或缩减。当进程调用malloc/free等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张)/释放的内存从堆中被剔除(堆被缩减)
- 栈:又称堆栈, 自动变量以及每次函数调用时所需保存的信息都放在此段中存放程序的 局部变量 (但不包括static声明的变量, static意味着 在数据段中 存放变量)。除此以外,在函数被调用时,栈用来传递参数和返回值。由于栈的先进先出特点,所以栈特别方便用来保存/恢复调用现场。储动态内存分配,需要程序员手工分配,手工释放
高地址