社区
C语言
帖子详情
new/delete 导致的内存碎片
albertjin123
2002-06-03 02:09:19
哪儿有相关的文档,FAQ呢?
...全文
155
2
打赏
收藏
new/delete 导致的内存碎片
哪儿有相关的文档,FAQ呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
school
2002-06-03
打赏
举报
回复
许多书中有。
楼上提到的两本书《windows核心编程》《thinking in C++ 》可到http://www.pcbookcn.com/
去下载。
dajian2000
2002-06-03
打赏
举报
回复
《windows核心编程〉有相关说明。
还有thinking in C++ 中介绍new /delete的相关部分。
C++
内存
泄漏检测原理+代码
C++
内存
泄漏检测原理的文档,包括代码,东东来自网络,我亲自整理,欢迎下载。
对象池模板
使用对象池,减少
new
和
delete
的次数,提供运行效率,减少
内存
碎片
,统一管理
内存
,防止
new
和
delete
用得不当
导致
内存
泄露,对应的博客链接:http://blog.csdn.net/d704791892/article/details/40486261
C++
内存
管理:
new
/
delete
vs malloc/free
C++中
new
/
delete
与malloc/free的主要区别在于:
new
/
delete
是C++关键字,具有类型安全性和自动的构造/析构调用,失败时抛出异常,且支持运算符重载;而malloc/free是C标准库函数,无类型检查,需手动计算
内存
大小,仅进行
内存
分配/释放。C++引入
new
/
delete
是为了更好地支持面向对象特性(构造/析构)、类型安全和异常处理。free释放的
内存
通常归还
内存
管理器而非直接返还操作系统,后续malloc可能复用。最佳实践推荐在C++中使用智能指针和RAII模式管理资源。
Linux: glibc: 频繁调用
new
/
delete
会不会
导致
内存
的
碎片
glibc的
内存
处理机制,是在释放的时候会自动将小块
内存
整合成大块
内存
,为接下来满足大块的需求的可能。而且程序也不是一直占着
内存
不释放(如果是一直不释放,要考虑是不是
内存
泄漏),这个和磁盘的
碎片
化还有些不一样,因为文件的存储时间长的多。而且每个程序对空间的申请量大多是有固定的模式,比如程序里的某个结构体的大小,固定就是10K,那就有了固定模式申请10K,释放10K,这个
内存
可以被重复利用。glibc 使用基于堆的
内存
分配方式,如果堆
内存
块被分割得过于零散,则可能
导致
某些
内存
不可用,即
内存
碎片
。
别再滥用
new
/
delete
现代C++开发中,频繁使用
new
/
delete
操作会
导致
性能问题和
内存
碎片
。文章指出:1.
new
/
delete
会触发系统调用和线程锁,
导致
堆
内存
碎片
化;2.RAII机制和智能指针是更好的
内存
管理方式;3.高频创建销毁场景应使用对象池技术;4.C++17引入的pmr分配器可优化
内存
分配。建议开发者减少手动
内存
管理,优先使用栈对象、智能指针和
内存
池等现代技术,以提升性能和
内存
利用率。
C语言
70,040
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章