社区
C++ 语言
帖子详情
反复new delete的性能影响会有多少?是否会造成内存碎片过多?
DarknessTM
2009-02-25 05:32:39
比如在一个控件的 OnPaint() 中使用,在特定情况下,可能会在一秒钟内刷新好几次。
用栈内容的数组是不是好很多?
可惜 C++不支持VLA啊
...全文
906
27
打赏
收藏
反复new delete的性能影响会有多少?是否会造成内存碎片过多?
比如在一个控件的 OnPaint() 中使用,在特定情况下,可能会在一秒钟内刷新好几次。 用栈内容的数组是不是好很多? 可惜 C++不支持VLA啊
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
27 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
knief不懂就问
2011-09-22
打赏
举报
回复
性能有没有影响
DarknessTM
2009-02-26
打赏
举报
回复
[Quote=引用 24 楼 iambic 的回复:]
先明白怎么写好看的代码,测试后再学习怎么写高效的代码。
说实话,如果1秒钟几次就要战战兢兢,如履薄冰,那计算机行业就太失败了。
[/Quote]
其实我倒不是怕计算机性能不足,只是想到程序那么频繁的内存申请操作而不爽罢了……
nmjnglx
2009-02-26
打赏
举报
回复
内存碎片肯定会产生,所以可以的话最好设计内存池来优化,其实也并不复杂.
频繁的new 与 delete在PC上影响可能不大,但是嵌入式系统就会有所显现的.
iambic
2009-02-26
打赏
举报
回复
先明白怎么写好看的代码,测试后再学习怎么写高效的代码。
说实话,如果1秒钟几次就要战战兢兢,如履薄冰,那计算机行业就太失败了。
redleaves
2009-02-26
打赏
举报
回复
如果不是长期的持有new出来的对象,则不太容易造成内存碎片.一般来说,这种局部对象是不会引起过多的内存碎片的.
只是new的性能和栈分配的性能会有一些差距.如果可以的话,临时对象最好用栈.虽然C++本身不支持变长数组.但你可以用alloca在stack上动态分配的空间.效果是和变长数组一样的.只不过这要求你在栈的使用上多加小心,不要把栈搞乱了.
yellowhwb
2009-02-26
打赏
举报
回复
不仅会有碎片,有碎片后,OS要进行内存整理,要耗费时间,并且,反复读取/写入存储器,也是要花费时间的!
在windows上可能看不出什么负作用,到了嵌入式OS上,如果在用一些比较慢的flash上,性能差异就显现出来了!
licry01
2009-02-26
打赏
举报
回复
路过学习
bardyx
2009-02-26
打赏
举报
回复
在OnPaint中new/delete?这个主意可不太好
ycw10132006
2009-02-26
打赏
举报
回复
在顶下
redoffice
2009-02-26
打赏
举报
回复
路过,学习了
蜥蜴枪王
2009-02-26
打赏
举报
回复
理论上照LZ的情况会产生的 但是内存碎片这种情况不容易发生
ysysbaobei
2009-02-26
打赏
举报
回复
顶下
xianyuxiaoqiang
2009-02-26
打赏
举报
回复
如果new的块太大,确实影响性能。能用栈的话还是优先栈。
DarknessTM
2009-02-26
打赏
举报
回复
[Quote=引用 12 楼 Dinelgua 的回复:]
闲new delete慢
就用栈被,只要不是太大就行
[/Quote]
栈的问题是编译期就要确定大小了,无法动态使用。
╮(╯▽╰)╭ 栈内存的性能太诱人了
fairchild811
2009-02-25
打赏
举报
回复
问题不大,没必要太在意这些东西
Dinelgua
2009-02-25
打赏
举报
回复
闲new delete慢
就用栈被,只要不是太大就行
tanshaojun
2009-02-25
打赏
举报
回复
路过,学习一下。。。。
nineforever
2009-02-25
打赏
举报
回复
VC9中,amd64的CRT会自动开启Vista中的low-fragmentation heap(LFH)
由于实际的分配操作都是由OS处理的,所以是否有内存碎片,性能是否有影响可以做一下profile
erhan_106
2009-02-25
打赏
举报
回复
路过 有不小收获
猫已经找不回了
2009-02-25
打赏
举报
回复
学习了.
加载更多回复(7)
C#:大量使用
new
运算符的结果与避免措施
对象的创建和销毁都需要一定的时间,频繁创建对象可能
会
导致额外的CPU开销,频繁的垃圾回收也
会
导致
性能
下降。频繁创建新的对象,
会
产生大量垃圾对象,需要使用垃圾清理器进行回收,频繁的垃圾清理,可能
会
影响
程序的
性能
。对于需要频繁创建和销毁的对象,可以使用对象池来管理对象的重复使用,从而降低
new
运算符的使用频率。频繁地创建对象,
会
导致对象生命周期管理变得复杂,可能
会
导致无法正确地回收不再使用的垃圾对象。频繁地创建和销毁对象,可能
会
导致堆
内存
的
碎片
化。尽可能地复用已经存在的对象,而不是频繁创建新对象。
new
、
delete
和malloc、free
图片来源。
[引擎开发] 深入C++
内存
管理
引入 说到C++的
内存
管理,我们可能
会
想到栈空间的本地变量、堆上通过
new
动态分配的变量以及全局命名空间的变量等,这些变量的分配位置都是由系统来控制管理的,而调用者只需要考虑变量的生命周期相关的内容即可,而无需关心变量的具体布局。这对于普通软件的开发已经足够,但对于引擎开发而言,我们必须对
内存
有着更为精细的管理。 程序的
内存
布局
内存
碎片
内存
对齐 缓存机制 SIMD Cache stl的
内存
控制 allocator 堆栈分配器模型 池分配器模型
碎片
整理 tcmal...
秋招面经总结—C++
内存
管理
C++
内存
管理知识涉及:
内存
分区、堆栈区别、
内存
碎片
、malloc/realloc/calloc/
new
/free的区别与实现原理、
内存
泄露、
内存
溢出、
内存
池等
C++补充
文章目录C/C++1、在main执行之前和之后执行的代码可能是什么?2、结构体
内存
对齐问题?3、指针和引用的区别4、堆和栈的区别5、区别以下指针类型?6、基类的虚函数表存放在
内存
的什么区,虚表指针`vptr`的初始化时间7、`
new
/
delete
`与 `malloc / free`的异同8、`
new
`和`
delete
`是如何实现的?9、`malloc`和`
new
`的区别?10、宏定义和函数有何区别?11、宏定义和typedef区别?12、变量声明和定义区别?13、哪几种情况必须用到初始化成员列表?14
C++ 语言
64,691
社区成员
250,497
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章