【问题标题】:Performance difference b/w heap allocated object and stack allocated object in c++ [duplicate]c ++中的b / w堆分配对象和堆栈分配对象的性能差异[重复]
【发布时间】:2018-04-02 05:17:16
【问题描述】:

我想知道黑白之间的性能差异

sample *s = new sample();

sample s;

其中 sample 是一个类。

【问题讨论】:

  • 答案是它取决于编译器、平台、编译器设置、类的大小、你的堆,以及在差异百分比方面,类的构造函数.通常不值得担心。如果是,您必须对其进行测试。
  • 如果这两行中的任何一行是您程序中的性能瓶颈,那么您就有问题了。您的示例也不包含静态,如 C++ 关键字中的任何内容。
  • @RetiredNinja 我刚开始学习 c++,如果这个问题没有意义,很抱歉,????。顺便说一句,我说的是静态内存分配,其中内存是在编译时和堆栈内存位置分配的,而在动态内存分配中,内存是在运行时和堆内存位置分配的,所以有任何性能两者的区别?
  • 堆栈分配(非静态)几乎总是更快。有时很重要,但您在桌面上谈论的是纳秒(通常)。
  • 编写可读的程序,如果动态分配使你的程序更简单、更易读——使用它。然后,如果它太慢运行分析器并优化花费最多时间的部分。

标签: c++


【解决方案1】:

不同之处在于动态分配比其他存储持续时间慢。多少:这取决于。差异可能完全无关紧要(例如,当代码未使用并且编译器恰好足够聪明以优化其中任何一个时)或非常重要以至于动态分配无法保证硬死线。

动态分配的一个比潜在性能差异更大的问题是,除非您遵循非常严格的约定,否则很难证明您的程序没有泄漏内存,或者它具有明确定义的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 2020-12-19
    • 2020-08-24
    • 2017-11-08
    • 1970-01-01
    • 2014-05-27
    • 2018-09-09
    相关资源
    最近更新 更多