C++内存管理

我们都知道:

  • 又叫堆栈--存放非静态局部变量/函数参数/返回值等等,栈是向下增长的。
  • 用于程序运行时动态内存分配,堆是可以上增长的。
  • 数据段--存储全局数据和静态数据。
  • 代码段--可执行的代码/只读常量

C/C++ 中的程序内存区域划分

C++内存管理方式 

 在C++中,C语言中用malloc/calloc/realloc函数来开辟动态内存空间的方法依然可以使用,但C++提出了新的内存管理方式:通过new和delete操作符来管理内存空间

对于内置类型来说:

管理对象:

    //开空间
    int* pp = new int;
	delete pp;
    //开辟内存空间并初始化
	int* ptr = new int(10);
	cout << *ptr << endl;
	//回收空间
	delete ptr;

管理对象数组:

    int* p = new int[4]{ 1,2,34,4 };
	for (int i = 0;i < 4;i++)
	{
		cout << p[i] << " ";
	}
	cout << endl;
	delete[] p;
申请和释放单个元素的空间,使用newdelete操作符,申请和释放连续的空间,使用
new[]delete[],注意:匹配起来使用。

 对于自定义类型

可以清楚的看到,new不仅开辟空间初始化,并且还调用了构造函数,因此,delete不仅会回收空间,还会调用析构。

在申请自定义类型的空间时, new 会调用构造函数, delete 会调用析构函数,而 malloc
free 不会

malloc/free和new/delete的区别

首先从他们两的定义来说,malloc/free都是c的库函数,而new/delete都是操作符

然后从用法上来说,malloc/free比new/delete要麻烦的多。要使用malloc的话,要先计算好类型的大小,而new不用;malloc函数的返回值是void*,要把返回值强制转为使用的类型,而new不用;malloc如果失败,返回值为NULL,要对其进行判空,new只要捕获异常即可;malloc函数只是开辟空间,new开辟空间并且初始化。

最重要的是,malloc/free只是开辟空间和回收空间,而new/delete可以开辟空间并初始化,如果是自定义类型的话,还会调用构造和析构。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值