目录
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函数释放对象的空间
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)