c/c++ 堆、栈、静态存储区
1,栈区
由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。
2,堆区
由程序员分配和释放,若程序员不释放,则在程序退出时由系统释放。
3,全局(静态)存储区
全局变量和静态变量是存储在一块的,初始化的全局变量和静态变量在一块区域(.data), 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域(.bss)。 程序结束后由系统释放。
4,常量区
存储常量字符串,程序结束后由系统释放
5,程序代码段
存储二进制代码
int main()
{
int a; //栈区
char *pc = malloc(10);
//分配来的10个字节是在堆区申请的,pc在栈上
char *pp = “123456”;
//"123456"字符存储于常量区,pp在栈上
static int ii = 0; // ii 全局静态存储区
}
效率问题
堆区由程序员动态申请,效率较慢,使用自由方便
栈区系统分配,效率较快
c++
自由存储区和堆
自由存储区是c++中通过new、delete来实现内存申请和释放时抽象出来的概念
堆是C语言和操作系统的术语,是操作系统维护的一块动态分配内存
new申请内存的区域称为自由存储区,其不等于堆。