社区
C语言
帖子详情
malloc或new对程序的效率影响体现在哪里,影响大吗?
center_de_han
2010-08-12 10:12:37
针对上面的问题还请大家各抒己见。
...全文
756
17
打赏
收藏
malloc或new对程序的效率影响体现在哪里,影响大吗?
针对上面的问题还请大家各抒己见。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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而言,他们申请内存时的效率不同主要是因为什么导致的?
风吹草低现羊牛
2010-08-12
打赏
举报
回复
内存池.........
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
打赏
举报
回复
我怎么认为这是程序必要的部分,没影响你的程序没法运行吧
C++中
new
与
malloc
的区别
这是个老生常谈的问题。当时我回答
new
从自由存储区上分配内存,
malloc
从堆上分配内存;
new
/delete会调用构造函数/析构函数对对象进行初始化与销毁;operator
new
/delete可以进行重载;然后强行分析了一下自由存储区与堆的区别。回来后感觉这个问题其实回答得不怎么好,因为关于
new
与
malloc
的区别实际上很多。面试期间刚好是刚期末考完,之后是几个课设没时间去整理。今天花了点时间整理下这个问题。
new
与
malloc
的10点区别 1. 申请的内存所在位置
new
操作符从自由存储区(
new
与
malloc
new
与
malloc
的10点区别1. 申请的内存所在位置
new
操作符从自由存储区(free store)上为对象动态分配内存空间,而
malloc
函数从堆上动态分配内存。自由存储区是C++基于
new
操作符的一个抽象概念,凡是通过
new
操作符进行内存申请,该内存即为自由存储区。而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于
程序
的内存动态分配,C语言使用
malloc
从堆上分配内存,使用fr...
malloc
,memset,
new
比较
一. memset 原型 extern void *
malloc
(unsigned int num_bytes); 头文件 #include 功能 分配长度为num_bytes字节的内存块 返回值 如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定要适当对齐,使其可以
malloc
背后的调用机制-
malloc
内存分配过程详解
说起
malloc
,但凡对C/C++有点基础的人在编写代码的时候都用过。我们调用
malloc
接口分配一段连续的内存空间,不使用时使用free可以释放这段内存空间。这些我们都已经比较的熟悉了。但是你知道
malloc
背后的调用机制吗? C语言
程序
员都知道,
malloc
只是C语言库标准提供的一个普通函数,我们实现的
malloc
和库函数比起来
效率
要低很多,但是可以通过编写一个简单的
malloc
来
体现
C库的精髓,我们实现的
malloc
和库的实现原理上市一致的。 一,
malloc
的定义: 根据标准C的定义,mall
C++ 内存、
new
与
malloc
分配内存区别?
一关于内存 1、内存分配方式 内存分配方式有三种: (1)从静态存储区域分配。内存在
程序
编译的时候就已经分配好,这块内存在
程序
的整个运行期间都存在。例如全局变量,static变量。 (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,
效率
很高,但是分配的内存容量有限。 (3) 从堆上分配,亦...
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章