C++——动态内存管理

目录

1. C++内存区域的划分

2. 常见变量的存储区域

3. new和delete

3.1 new和deleted的使用

3.2 malloc/free与new/delete的区别

3.3 new、delete、newT[]和delete[]的原理

3.3.1 new的原理

3.3.2 delete的原理

3.3.3 new T[N]的原理

3.3.4 delete[]原理

4. 定位new

4.1 定位new的概念

4.2 定位new的格式

4.3定位new的使用场景

5. 内存泄漏

5.1内存泄漏的概念

5.2 内存泄漏的分类(了解)

5.3 如何检测内存泄漏(了解)

5.4 如何避免内存泄漏


1. C++内存区域的划分

                                       

1、栈又叫堆栈——非静态局部变量/函数参数/返回值等等,栈是向下增长的。

2、内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。

3、用于程序运行时动态内存分配,堆是向上增长的。

4、数据段——存储全局数据和静态数据。

5、代码段——可执行的代码/只读常量。

2. 常见变量的存储区域

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";//栈区,*char2在栈区
	const char* pChar3 = "abcd";//指针在栈区,*pchar3在常量区
	int* ptr1 = (int*)malloc(sizeof(int) * 4);//指针在栈区,*ptr1在堆区
	int* ptr2 = (int*)calloc(4, sizeof(int));///栈区
	int* ptr3 = (int*)realloc(ptr2, sizeof(int) * 4);//栈区
	free(ptr1);
	free(ptr3);
}

3. new和delete

3.1 new和deleted的使用

int main()
{
	int* p1 = new int;//在堆区申请一个int大小的空间,不会初始化
	int* p2 = new int(0);//申请并初始化为0
	delete p1;
	delete p2;
 
	int* p3 = new int[10];//在堆区申请一块10个int大小的空间,未初始化
	int* p4 = new int[10]{ 1,2,3};//初始化为{1,2,3,0,0,0,0,0,0,0}
	delete[] p3;
	delete[] p4;
	return 0;
}

        注意:申请和释放单个元素的空间,使用new和delete操作符,申请和释放连续的空间,使用new[]和delete[],一定要匹配起来使用!!!

3.2 malloc/free与new/delete的区别

        malloc/free和new/delete的共同点是:都是从堆上申请空间,并且需要用户手动释放。
不同的地方是:
1. malloc和free是函数,new和delete是操作符
2. malloc申请的空间不会初始化,new可以初始化
3. malloc申请空间时,需要手动计算空间大小并传递,new只需在其后跟上空间的类型即可, 如果是多个对象,[]中指定对象个数即可
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值