(1)栈(stack):由编译器自动分配释放,存放函数的参数值、局部变量的值、返回地址等,其操作方式类似于数据结果中的栈。
栈又称堆栈,
(2)堆(heap):一般由程序员动态分配(调用malloc函数)和释放(调用free函数),若程序员不释放,程序结束时可能由操作系统回收。
堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)。
(3)数据段(data):存放的是全局变量、静态变量、常数。根据存放的数据,数据段又可以分为普通数据段(包括可读可写/只读数据段,存放静态初始化的全局变量或常量)、BSS数据段(存放未初始化的全局变量)。在采用段式内存管理的架构中,BSS段(bss
(4)文字常量区:—常量字符串就是放在这里的,程序结束后由系统释放
(5)代码段(code):用于存放程序代码。代码段(code
内存分布示意图
//main.cpp
int
char
main()
{
int
char
char
char
static
//以下分配得到的10和20字节的区域就在堆区
p1
p2
strcpy(p1,
}