动态内存管理
来源:互联网 发布:最陡下降算法 编辑:程序博客网 时间:2024/06/06 00:54
1:malloc/free和new/delete之间关系和差异。
共同点:他们都是动态管理内存的入口
不同点:
(1)malloc/free是C/C++的标准库函数,而new/delete是C++操作符;
(2)malloc/free使用时要自己对于类型大小进行计算,返回值为void*;
new/delete使用时不需要自己计算类型大小,返回值为对应类型的指针;
(3)malloc/free只是动态分配内存空间,new/delete除了分配空间,还会调用构造函数和析构函数进行初始化和清理;
(4)malloc/free如果失败了返回0,new/delete如果失败了会抛异常。
2:new/delete、new[]/delete[]到底做了些什么事情
new: 先调用 operator new分配空间,然后调用构造函数初始化对象。
delete: 先调用析构函数清理对象,然后调用operator delete释放空间。
new[N]:先调用 operator new分配空间,然后调用N次构造函数初始化对象。
delete[]:先调用N次析构函数清理对象,然后调用operator delete释放空间。
3:NEW_ARRAY/DELETE_ARRAY宏,模拟new[]/delete[]申请和释放数组。
#define_CRT_SECURE_NO_WARNINGS
#defineNEW_ARRAY(PTR,TYPE,N) \
do{ \
PTR = (TYPR*)operatornew(sizeof(TYPE)*N + 4); \
(*(int*)PTR) = N; \
PTR = (TYPE*)((char*(PTR)+4)); \
for(size_t i = 0; i < N; i++) \
new(PTR + i)TYPE; \
}while(false);
#defineDELETE_ARRAY(PTR,TYPE) \
do{ \
size_t N = *((int*)PTR - 1); \
for(size_t i = 0; i < N; i++) \
PTR[i].~TYPE(); \
PTR = (TYPE*)((char*)PTR - 4); \
operatordelete(PTR); \
}while(false);
阅读全文
0 0
- 动态内存管理
- 动态内存管理实例
- C++ 动态内存管理
- 动态内存管理
- 动态内存管理
- 动态内存管理
- 动态内存管理
- 动态内存管理
- 动态内存管理
- 动态内存管理
- 动态内存管理
- 动态内存管理类
- 【007】动态内存管理
- 动态内存管理
- 动态 内存管理
- 动态内存管理
- c++动态内存管理
- 动态内存管理
- 【前端】css相关
- 5-1 继承与派生
- VS 2010 快捷键
- HDU 1007 Quoit Design (分治)
- Linux安装Tomcat
- 动态内存管理
- delphi FMX控件的常见属性
- 【廖雪峰Python习题集】定义函数
- web前端自学播客
- 棋盘覆盖问题
- import static-静态导入
- Fibonaci数列的非递归算法
- 微博签到数据可视化分析研究
- 4、Oracle查询语句-where字句