目录
C/C++中内存分布
C++内存管理方式
operator new与operator delete函数(重点)
new和delete的实现原理
C/C++中内存分布
说明:
1. 栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。(编译器自动管理)
2. 堆用于程序运行时动态内存分配,堆是可以上增长的。(程序员自己管理)
3. 数据段--存储全局数据和静态数据。
4. 代码段--可执行的代码/只读常量。
为了更好掌握上边的知识,我们来看看下面对应的变量在哪里吗?
int globalVar = 1;
static int staticGlobalVar = 1;
void Test()
{
static int staticVar = 1;
int localVar = 1;
int num1[10] = {1, 2, 3, 4};
char char2[] = "abcd";
char* pChar3 = "abcd";
int* ptr1 = (int*)malloc(sizeof (int)*4);
int* ptr2 = (int*)calloc(4, sizeof(int));
int* ptr3 = (int*)realloc(ptr2, sizeof(int)*4);
free (ptr1);
free (ptr3);
}
C++内存管理方式
C语言使用malloc/calloc/realloc和free进行动态内存管理,那C++呢?
通过new和delete操作符进行动态内存管理。
void Test()
{
int* ptr4 = new int;
int* ptr5 = new int(3);//这里3是初始化数值
delete ptr4;
delete ptr5;
int* ptr6 = new int[3];//这里的3是数组对象个数
delete[] ptr6;
}
注意:申请和释放单个元素的空间,使用new和delete操作符,申请和释放连续的空间,使用new[]和delete[]。
operator new与operator delete函数(重点)
new和delete是用户进行动态内存申请和释放的操作符,operator new 和operator delete是系统提供的全局函数,new在底层调用operator new全局函数来申请空间,delete在底层通过operator delete全局函数来释放空间。
new和delete的实现原理
new的原理
1. 调用operator new函数申请空间
2. 在申请的空间上执行构造函数,完成对象的构造
delete的原理
1. 在空间上执行析构函数,完成对象中资源的清理工作
2. 调用operator delete函数释放对象的空间



