malloc或new对程序的效率影响体现在哪里,影响大吗?

center_de_han 2010-08-12 10:12:37
针对上面的问题还请大家各抒己见。
...全文
756 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
center_de_han 2010-08-12
  • 打赏
  • 举报
回复
非常感谢各位的讨论,谢谢jackyjkchen给出的解释,lazy_2010给我们提出的建议,非常感谢。
center_de_han 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 brooknew 的回复:]
new 先malloc出内存,然后会调用类的构造函数
[/Quote]

那如果这样呢 char *p = new char[100];
char是基础数据类型,应该不涉及你说的类这个东东。
brooknew 2010-08-12
  • 打赏
  • 举报
回复
new 先malloc出内存,然后会调用类的构造函数
center_de_han 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jackyjkchen 的回复:]
不过CString的效率问题主要由拷贝造成的,分配过以后要将原来内容拷贝,分配本身开销并不大
[/Quote]

对,stl里面的一些东东也是通过牺牲效率来使coding变得方便,减少代码量的
center_de_han 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lazy_2010 的回复:]
我常遇到的效率影响:

1、CString 的 + 操作符,不断地进行追加,会不断地进行 new 和 delete 操作,如果只是几次倒无所谓了,如果是上万次的,效率很低;

2、类似于 CStringArray 的操作,如果频繁地 append ,效率也是很低的。
[/Quote]

对的,c++被人诟病的也主要是这些。内存分配不透明,就像对于+的重载就让初学者对内存的分配搞不清,对效率的影响也就不言而喻了
jackyjkchen 2010-08-12
  • 打赏
  • 举报
回复
不过CString的效率问题主要由拷贝造成的,分配过以后要将原来内容拷贝,分配本身开销并不大
ayw215 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lazy_2010 的回复:]

我常遇到的效率影响:

1、CString 的 + 操作符,不断地进行追加,会不断地进行 new 和 delete 操作,如果只是几次倒无所谓了,如果是上万次的,效率很低;

2、类似于 CStringArray 的操作,如果频繁地 append ,效率也是很低的。
[/Quote]
所以要少用它的这些操作
另外,可能的话,就去用内存池吧
jackyjkchen 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lazy_2010 的回复:]
我常遇到的效率影响:

1、CString 的 + 操作符,不断地进行追加,会不断地进行 new 和 delete 操作,如果只是几次倒无所谓了,如果是上万次的,效率很低;

2、类似于 CStringArray 的操作,如果频繁地 append ,效率也是很低的。
[/Quote]
CString的Format也是
lazy_2010 2010-08-12
  • 打赏
  • 举报
回复
我常遇到的效率影响:

1、CString 的 + 操作符,不断地进行追加,会不断地进行 new 和 delete 操作,如果只是几次倒无所谓了,如果是上万次的,效率很低;

2、类似于 CStringArray 的操作,如果频繁地 append ,效率也是很低的。
jackyjkchen 2010-08-12
  • 打赏
  • 举报
回复
复杂度,这是唯一的解释,malloc就是分配内存加上一些运行库的辅助手段(比如debug模式下的初始化和内存泄漏检测)

new还要给非内置类型调用析构函数,从C++的理念看,想必安全工作也做了更多
center_de_han 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xianzq888 的回复:]
内存池.........
[/Quote]

内存池,是不是就是如果需要频繁的操作内存的时候就先申请多块内存,然后使用的时候直接从“池”中获取一块就可以了,跟线程池应该差不多吧?
center_de_han 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jackyjkchen 的回复:]
windows平台,速度上显然HeapAllc>malloc>new,但是分配内存本身并不消耗多少时间,尤其是release版(不填充)

频繁的分配是有一定耗时的,而且不安全,此时用内存池
[/Quote]

就malloc和new而言,他们申请内存时的效率不同主要是因为什么导致的?
  • 打赏
  • 举报
回复
内存池.........
center_de_han 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bobo364 的回复:]
我怎么认为这是程序必要的部分,没影响你的程序没法运行吧
[/Quote]

这个倒是没有,就是想跟大家讨论一下
jackyjkchen 2010-08-12
  • 打赏
  • 举报
回复
windows平台,速度上显然HeapAllc>malloc>new,但是分配内存本身并不消耗多少时间,尤其是release版(不填充)

频繁的分配是有一定耗时的,而且不安全,此时用内存池
fire_woods 2010-08-12
  • 打赏
  • 举报
回复
频繁的malloc或者new还是会对性能有影响的, 另外new比malloc要跟耗时.
bobo364 2010-08-12
  • 打赏
  • 举报
回复
我怎么认为这是程序必要的部分,没影响你的程序没法运行吧

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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