c/c++动态内存管理

c语言的动态内存管理:

C语言使用库函数中的malloc/calloc/realloc/free进行动态内存管理
1.malloc:在内存中开辟一块指定大小的空间,将空间首地址给指针变量。
函数声明:void*malloc(size_t size);
如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
这里写图片描述
2.calloc:在内存的动态存储区中分配n个长度为size的连续空间。
函数声明:void*calloc(size_t n,size_t size);
函数返回一个指向分配起始的指针,如果分配不成功,返回NULL。

calloc
3.realloc:先判断当前的指针是否有足够的连续空间,如果有,扩大mem_address指向的地址,并且将mem_address返回,如果空间不够,先按照newsize指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来mem_address所指内存区域(注意:原来指针是自动释放,不需要使用free),同时返回新分配的内存区域的首地址。
函数声明:void *realloc(void *mem_address, unsigned int newsize);
如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
4.free:原型: void free(void *ptr)
功能: 释放ptr指向的存储空间。被释放的空间通常被送入可用存储区池,以后可在调用malloc、realloc以及calloc函数来再分配。
C动态内存管理的缺陷引入C++动态内存管理:
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
: 对于非内部数据类型的对象而言,光用malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free

C++动态内存管理基本语法和使用

C++通过new和delete动态管理内存。
new/delete动态管理对象。
new[]/delete[]动态管理对象数组。
operator new/operator delete operator new[]/operator delete[]:只分配(释放)所要求的空间,不调用相关对象的构造(析构)函数。
定位new表达式:是在已分配内存空间中调用构造函数初始化一个对象。
定位new表达式的常见形式
new(address) type;
new(address) type(initializers);
new(address) type[size];
new(address) type[size]{braced initializer list};
定位new表达式调用 void operator new(size_t, void ); 分配内存。
delete[] 析构函数调用细节剖析 :回收用 new[] 分配的一组对象的内存空间的时候用 delete[],析构后将原指针赋为NULL。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值