STL-动态内存管理

动态内存管理

c和c++动态管理联系与差异:(malloc free 和new delete联系和区别)

1.他们是用来动态开辟空间的。

2.malloc开辟的空间没有初始化,不是对象,而new出来的是对象,先调用malloc开辟空间,再调用调用了构造函数初始化这片空间。free释放了这片空间,而delete则先是调用析构函数,在调用free进行释放空间。
3.malloc和free是c语言所用的函数,而new和delete是c++的操作符。
 
 
 
 
c语言 malloc calloc realloc/free进行内存管理
malloc:向堆申请一块空间,并且返回一个void类型的指针,这时我们需要将这个指针进行强转为我们需要的类型。
calloc: 和malloc一样都是申请一块空间,有所不同的是,它可以指定一次分配多少块这样大小的空间。
realloc:在原来有的空间上进行追加的分配,也就是当你现在的空间不够使用了,需要保留原来的数据,但同时需要多一点的空间来存放新的内容时。
下面是我用图来进行对realloc进行说明:
 
 
c++的动态分配:
c++用new,detele来进行动态分配的。
下面我们看下new delete是怎么开辟空间的:
下面我们通过调试我们看一下它们工作过程:
class A
{
public:
	A()
	{
		cout << "A->构造" << endl;
	}

	~A()
	{
		cout << "A->析构" << endl;
	}

protected:
	int _a;
};

int main()
{


	A* a = new A[3];

	delete[] a;

	
	return 0;
}
通过调试看到下面情况:
 
 
 
 

 

这里还有一个问题如下:当我显示写出析构函数和使用默认的差别:

下面我们简单的通过宏来模拟我们new和delete:

 

#define New_array(Point,type,size)                           \
do{                                                          \
	Point = (type*)operator new(sizeof(type)*n + sizeof(int))\
	*(int*)Point = size;                                     \
	Point = ((type*)((char*)Point + sizeof(int)));           \
	for (size_t i = 0; i < size; ++i)                        \
	new(ptr + i)type;                                        \
} while (0);


//
#define Delete_array(Point,type)           \
	do                                     \
	{size_t size = *((int*)Point - 1);     \
	for (size_t i = 0; i < size; ++i)      \
	(Point + i)->~type();                  \
	operator delete(type*)((int*)Point-1)  \
	} while (false);

 

 

 

 

 

 


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值