当前位置:  开发笔记 > 编程语言 > 正文

C++:删除与免费和性能

如何解决《C++:删除与免费和性能》经验,为你挑选了3个好方法。

关于new/delete和malloc/free的一些性能说明:

malloc和free 分别调用构造函数和解构函数.这意味着你的课程不会被自动化或自动取消初始化,这可能是不好的(例如未经执行的指针)!这对于像char和double这样的POD数据类型无关紧要,因为它们实际上没有ctor.

new和delete 调用构造函数和解构函数.这意味着您的类实例会被初始化并自动取消初始化.但是,通常会出现性能损失(与普通分配相比),但这样做会更好.

我建议保持与new/malloc使用一致,除非你有理由(例如realloc).这样,您可以减少依赖关系,减少代码大小和加载时间(但只能通过smidgin).此外,你不会因为使用new分配的东西,或删除使用malloc分配的内容而陷入困境.(这很可能会导致崩溃!)



1> strager..:

关于new/delete和malloc/free的一些性能说明:

malloc和free 分别调用构造函数和解构函数.这意味着你的课程不会被自动化或自动取消初始化,这可能是不好的(例如未经执行的指针)!这对于像char和double这样的POD数据类型无关紧要,因为它们实际上没有ctor.

new和delete 调用构造函数和解构函数.这意味着您的类实例会被初始化并自动取消初始化.但是,通常会出现性能损失(与普通分配相比),但这样做会更好.

我建议保持与new/malloc使用一致,除非你有理由(例如realloc).这样,您可以减少依赖关系,减少代码大小和加载时间(但只能通过smidgin).此外,你不会因为使用new分配的东西,或删除使用malloc分配的内容而陷入困境.(这很可能会导致崩溃!)



2> activout.se..:

答1:两者free(p)delete p用NULL指针正常工作.

答案2:没有看到代码的缓慢部分就无法回答.你应该分析代码!如果您使用的是Linux,我建议使用Callgrind(Valgrind的一部分)来查找执行的哪些部分花费的时间最多.



3> cic..:

问题一:什么都不会发生.

从目前的ISO/IEC 14882(或:C++)草案:

20.8.15 C库[c.malloc]

内容[of ,即:where freelives,]与标准C库[(参见intro.refs)]标题相同,并带有以下更改:[不会影响此答案].

因此,从ISO/IEC 9899:1999(或:C):

7.20.3.2 free功能

如果[[]] ptr[参数]是空指针,则不执行任何操作.

再次从C++标准,有关delete此时间的信息:

3.7.4.2释放函数[basic.stc.dynamic.deallocation]

提供给解除分配函数的第一个参数的值可以是空指针值; 如果是这样,并且如果解除分配功能是标准库中提供的功能,则该调用无效.

也可以看看:

new/ deletemalloc/有free什么区别?

当你尝试在c中free()已经free存储时会发生什么?

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有