某些基本操作的CPU成本数量级

Ste*_*and 2 c++ performance memory-management

在回答了那个问题并且被拒绝后,我想和你一起检查一下.

为了得到我编写的代码成本的草案,我倾向于以这种方式扩展操作.

  • 堆分配比堆栈分配慢大约1000倍.
  • 具有屏幕/输出的IO比堆分配慢大约1000倍.
  • 硬盘上的IO比屏幕上的图形IO慢大约1000倍.

您认为这是正确的假设/数量级/估计吗?

(当然,没有什么比真正的应用程序分析:-))

编辑:作为根据你的答案和评论的第一个结论,可以说我的数字1000被大大高估了.

pax*_*blo 5

如果您要进行类似的大规模概括,您可能需要考虑使用硬数据来备份它们.

我不怀疑你对大多数架构的相对效率你是对的(我说的最简单,因为可能有一些奇怪的架构,我不知道),但这些1000x比例是可疑的,没有证据.

而实际上,我不是某些有关屏幕和磁盘I/O的相对效率,因为它可以通过缓冲的影响.我经常发现,在将输出定向到磁盘文件时,向屏幕输出数千行的程序运行得更快.

例如,以下程序:

#include <stdio.h>
int main (void) {
    int i;
    for (i = 100000; i > 0; i--)
        printf ("hello\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

运行方式:

pax$ time myprog
hello
hello
:
hello

real    0m12.861s
user    0m1.762s
sys     0m2.002s

pax$ time ./myprog >/tmp/qq

real    0m0.191s
user    0m0.160s
sys     0m0.050s
Run Code Online (Sandbox Code Playgroud)

换句话说,该环境中的屏幕I/O(XP下的CygWin)持续时间长达67倍,CPU时间长达17倍(可能是因为所有Windows更新).