行业知识
C++内存管理【new 和 delete 关键字】笔记
2026-10-19 17:37:34
来源:互联网转载
文章目录
- 一、内存管理
- 二、C++内存管理
- (1) new 和delete 关键字
- (2) 类成员的new 和 delete
- (3) 底层原理(operator new 和 operator delete)
- 三、自定义类型多开4字节空间存储对象个数
- 四、内���池
一、内存管理
-
内存分布:
()栈 -> 局部变量,形参,常变量;
堆 -> 动态申请的空间;
()数据段(静态区)-> static静态变量, 全局变量;
代码段(常量区)-> 字面量,字符串。
-
解释变量存在哪里?
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";// 局部变量,栈区。-> "abcd" 存在常量区,char2 拷贝字符串数据到栈区。// *char2 是字符‘a’,也存在栈区。const char* pChar3 = "abcd";// const 修饰的常变量,pChar3存在栈区,指向常量区的字符串。// *pChar3 是字符串"abcd", 在常量区。int* ptr1 = (int*)malloc(sizeof(int) * 4);// ptr1 是存储在栈上的局部变量,存储堆区的地址。// *ptr1 动态开辟的地址,在堆区。int* ptr2 = (int*)calloc(4, sizeof(int));// 开辟4个int类型的空间,并初始化为0。int* ptr3 = (int*)realloc(ptr2, sizeof(int) * 4);// 动态扩容,调整空间大小(后面内存足够->原地扩,不够->异地扩)free(ptr1);free(ptr3);// 一旦使用realloc, 原来地址ptr2 已经被free()了,不能在使用,也不能在free()。}二、C++内存管理
(1) new 和delete 关键字
关键字要匹配
- new int -> delete
- new int[10] -> delete[]
int main(){// 动态申请一个int类型的空间,默认随机值,不会初始化。int* p1 = new int;// 动态申请一个int类型的空间,并初始化int* p2 = new int(10);// 动态申请10个int类型的空间int* p3 = new int[10];// 动态申请10个int类型的空间int* p4 = new int[10] {10, 9, 8, 7};// 释放空间delete p1;delete p2;// 释放连续的空间delete[] p3;delete[] p4;return 0;}(2) 类成员的new 和 delete
class A{public:A(int a=0):_a(a){cout cout // 动态开辟一个自定义类型 A 空间。- 调用构造函数A* p1 = new A(10);delete p1;// 释放空间 - 调用析构函数A* p2 = new A[10]{ 1,2,3,4,5,6,7,8 };delete[] p2;return 0;}function();}catch (const exception& e){ cout
-
上一篇:nvr怎么接进服务器?
下一篇:无法连接服务器怎么消除?