C/C++内存管理

内存区域划分

常见内存区域划分如下

 说明:

  1. 栈又叫堆栈存储非静态的局部变量、函数参数、返回值等,栈是向下增长的。
  2. 堆用于程序运行时的动态内存分配,malloc申请空间就是在堆上申请的,堆是向上增长的。
  3. 数据段,存储全局数据和静态数据
  4. 代码段,存储可执行代码和只读常量。

内存管理

在C语言中,我们通常使用malloc、realloc、calloc等函数动态开辟空间,最后通过free释放掉空间。在C++中,新增了自己的内存管理方式:通过new和delete操作符进行动态内存管理C语言的malloc、free同样在C++适用。

int main()
{
	// 动态申请一个int类型的空间
	int* ptr1 = new int;

	// 动态申请一个int类型的空间并初始化为10
	int* ptr2 = new int(10);

	// 动态申请10个int类型的空间
	int* ptr3 = new int[10];

	delete ptr1;
	delete ptr2;
	delete[] ptr3;

	return 0;
}

申请和释放单个元素的空间,使用new和delete操作符;申请和释放连续的空间,使用new[ ]和 delete[ ]

new和delete还适用于申请和销毁自定义类型

class A
{
private:
	int _a;
	int _b;
};

int main()
{
	//p指向一个new出来的A类对象
	A* p = new A;

	return 0;
}

在申请自定义类型空间时,new会去调用改类型的构造函数,delete会去调用析构函数。而maloc和free就不会这么做。

new和delete底层代码

operator new实际上就是通过malloc申请的空间,operator delete就是通过free释放的空间

 delete的底层调用没有找出来,不过确实是调用了free来实现的。

想详细了解operator new和operator delete的可以百度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值