一、C++编译器将内存分为四个区:
1、代码区
存放 CPU 执行的机器指令
特点:(1)共享性(不管程序运行几次,都只用一份代码。并且另外的执行程序可以调用它)。
(2)只读性(代码区是只读的程序运行时,该取什么内容都不能修改)
另外,代码区还规划了局部变量的相关信息。
总结:你所写的所有代码都会放入到代码区中,代码区的特点是共享和只读。
2、全局区
全局区中主要存放的数据有:全局变量、静态变量、常量(如字符串常量)。
全局区的叫法有很多:全局区、静态区、数据区、全局静态区、静态全局区。
这部分可以细分为data区和bss区
总结:全局区存放的是全局变量、静态变量和常量
3、栈区
栈是一种先进后出的内存结构,由编译器自动分配释放。
存放函数的参数值、返回值、局部变量等。(该区由编译器来管理)
4、堆区
堆是一个大容器,它的容量要远远大于栈,但没有栈那样先进后出的顺序。用于动态内存分配。(该区由程序员来管理)
存放由 malloc 和 new 生成的数据,用完数据后可以用 free 和delete 释放。
二、new和delete关键字
new的用法举例:
1、动态分配变量和释放变量:
int * p = new int(10) ; //在堆区动态开辟一个整形指针变量,并且初始化出为10.
delete p;
2、动态分配一维数组和释放数组:
int * p1 = new int[10] ; //在堆区动态开辟一个由10个int型的变量的数组,并且初始化为0.
delete[] p1;
3、动态开辟二维数组并释放:
int **p1 = new int *[10];
for(int i = 0;i < 10;i++)
{
p1[i] = new int [10];
}
for(int i = 0;i < 10;i++)
{
delete[] p1[i];
}
delete[] p1;
详细内容见本栏下的具体条目。
联系客服