反复new delete的性能影响会有多少?是否会造成内存碎片过多?

DarknessTM 2009-02-25 05:32:39
比如在一个控件的 OnPaint() 中使用,在特定情况下,可能会在一秒钟内刷新好几次。

用栈内容的数组是不是好很多?


可惜 C++不支持VLA啊
...全文
906 27 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
路过 有不小收获
  • 打赏
  • 举报
回复
学习了.
加载更多回复(7)

64,691

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧