use*_*522 26 c++ performance pointers
考虑:
char *p=NULL;
free(p) // or
delete p;
Run Code Online (Sandbox Code Playgroud)
如果我使用free和delete开启会发生什么p?
如果程序需要很长时间才能执行,比如10分钟,有没有办法将其运行时间减少到5分钟?
str*_*ger 61
关于new/delete和malloc/free的一些性能说明:
malloc和free 不分别调用构造函数和解构函数.这意味着你的课程不会被自动化或自动取消初始化,这可能是不好的(例如未经执行的指针)!这对于像char和double这样的POD数据类型无关紧要,因为它们实际上没有ctor.
new和delete 会调用构造函数和解构函数.这意味着您的类实例会被初始化并自动取消初始化.但是,通常会出现性能损失(与普通分配相比),但这样做会更好.
我建议保持与new/malloc使用一致,除非你有理由(例如realloc).这样,您可以减少依赖关系,减少代码大小和加载时间(但只能通过smidgin).此外,你不会因为使用new分配的东西,或删除使用malloc分配的内容而陷入困境.(这很可能会导致崩溃!)
cic*_*cic 10
问题一:什么都不会发生.
从目前的ISO/IEC 14882(或:C++)草案:
20.8.15 C库[c.malloc]
内容[of
<cstdlib>,即:wherefreelives,]与标准C库[(参见intro.refs)]标题相同<stdlib.h>,并带有以下更改:[不会影响此答案].
因此,从ISO/IEC 9899:1999(或:C):
7.20.3.2
free功能如果[[]]
ptr[参数]是空指针,则不执行任何操作.
再次从C++标准,有关delete此时间的信息:
3.7.4.2释放函数[basic.stc.dynamic.deallocation]
提供给解除分配函数的第一个参数的值可以是空指针值; 如果是这样,并且如果解除分配功能是标准库中提供的功能,则该调用无效.
也可以看看:
| 归档时间: |
|
| 查看次数: |
66163 次 |
| 最近记录: |