在C++中, 内存分成5个区,分别是堆,栈,自由存储区,静态存储区,常量存储区。
栈:
编译器在需要的时候分配,在不需要的时候自动清除。里面的变量通常是局部变量或者函数参数。
堆:
由new分配的内存块,编译器并不关心它们的释放,由我们的应用程序去控制。如果我们没有释放掉,那么在程序结束后,系统会自动回收。
自由存储区:
由malloc分配的内存块,和堆非常相似,不过它用free来释放。
静态存储区:
全局变量和静态变量分配到静态存储区,在C语言中,全局变量又分为初始化的和未初始化的,在C++里面就没有这种区分,他们共同占用同一块内存。
常量存储区:
他们里面存放的是常量,不允许修改
int a = 0; //静态存储区
char *p1; //静态存储区
void main()
{
int b; //栈
char s[] = "abc"; //栈
char *p2; //栈
char *p3 = "123456"; //123456:常量存储区,p3:栈
static int c = 0; //静态存储区
p1 = new char[10]; //堆
p1 = "123456"; //123456:常量存储区,编译器将p1与p3所指向的"123456"优化成同一个地方
}
网友评论