C/C++动态内存管理
来源:互联网 发布:在线php编辑器 编辑:程序博客网 时间:2024/06/05 18:07
1:总结并剖析malloc/free和new/delete之间关系和差异。
2:剖析new/delete、new[]/delete[]到底做了些什么事情。
3:实现NEW_ARRAY/DELETE_ARRAY宏,模拟new[]/delete[]申请和释放数组。
C动态内存管理
C语言使用malloc/realloc/calloc/free进行动态内存管理
realloc=>指针给空时,与malloc作用一样void *realloc( void *memblock, size_t size );
calloc开空间,初始化void *calloc( size_t num, size_t size );
malloc负责开空间void *malloc( size_t size );
关于malloc函数的用法
C++动态内存管理
C++通过new和delete动态管理内存
new/delete动态管理对象
new[]/delete[]动态管理数组
注意:malloc/free,new/delete,new[]/delete[]一定要匹配使用,否则可能出现内存泄漏甚至崩溃的问题
1:总结并剖析malloc/free和new/delete之间关系和差异。
相同点:都是动态内存管理的入口
不同点:1)malloc和free是C/C++中的标准库函数,new和delete是C++的运算符。
2 ) malloc失败后返回值为0,而new失败后会抛异常。
3)new返回指定类型的指针并且可以自动计算所需大小;而 malloc 则必须要由我们计算字节数,并且在返回后强行转换为实际类型的指针。
//new/delete int *p; p = new int; //返回类型为int *类型,分配的大小为sizeof(int) p = new int[100]; //返回类型为int *类型,分配的大小为sizeof(int) * 100//malloc/free int* p; p = (int *)malloc(sizeof(int)* 128);//分配128个(可根据实际需要替换该数值)整型存储单元,并将这128个连续的整型存储单元的首地址存储到指针变量p中 double *pd = (double *)malloc(sizeof(double)* 12);//分配12个double型存储单元,并将首地址存储到指针变量pd中
2:剖析new/delete、new[]/delete[]到底做了些什么事情。
new/delete
new —>调用operator new()分配空间
—>调用构造函数初始化对象
delete—>调用析构函数进行清理工作
—>调用operator delete()释放空间
new[]/delete[]
new[N] —>调用operator newN分配空间
—>调用N次构造函数分别初始化对象
delete[N]—>调用N次析构函数进行清理工作
—>operator deleteN释放空间
3:实现NEW_ARRAY/DELETE_ARRAY宏,模拟new[]/delete[]申请和释放数组。
模拟实现NEW
#define NEWARRAY(PTR,TYPE, N) \do \{ \ PTR = (TYPE*)operator new(sizeof(TYPE)*n) \for (size_t i = 0; i < n; ++i) \ new(PTR + i)TYPE; \}while (false);
模拟实现DELETE
#define DELETEARRAY(PTR,TYPE) \do \{ \ size_t N = *((int*)PTR - 1); \ for (size_t i = 0; i < ; ++i) \ PTR[i].~TYPE(); \ PTR = (TYPE*(char*)PTR - 4; \ operator delete(PTR); \} while (false);
- 【C++】动态内存管理
- 【C++】动态内存管理
- 【C++】动态内存管理
- C语言动态内存管理
- c的动态内存管理
- C语言动态内存管理
- C语言动态内存管理
- C/C++动态内存管理
- C语言动态内存管理
- 【C++】C++动态内存管理
- C/C++动态内存管理
- c的动态内存管理
- C/C++动态内存管理
- c/c++动态内存管理
- C/C++动态内存管理
- C/C++动态内存管理
- C/C++动态内存管理
- C/C++动态内存管理
- Java面向对象之继承
- Dagger2的基本配置
- Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) 831C. Jury Marks【二分】【水题】
- python 学习笔记 os模块
- 记事本 BOM 之 “联通” "联" “联想” 为什么有的显示不正常
- C/C++动态内存管理
- nohup后台运行shell
- 嵌入式Linux 执行程序时提示:-sh: No such file or directory
- CentOS 7 鸟叔私房菜/etc/init.d/* 与 service 命令的替代方法:systemctl
- 通过外部的点击事件更新ViewPage 中的信息
- 分布式文件系统FastDFS设计原理
- 利用SpringMVC过滤器解决vue跨域请求
- 部署Web项目的War包到Tomcat服务器
- 静态连接库(lib)的生成与调用