我意识到这个问题不可能绝对回答,但我只是在了解大致数字:
给定一个合理大小的 C 程序(数千行代码),平均会生成多少条 ASM 指令。换句话说,现实的 C 与 ASM 指令比率是多少?随意做出假设,例如“使用当前的 x86 架构”。
我试图谷歌这件事,但我找不到任何东西。
附录:注意到这个问题带来了多少混乱,我觉得需要解释一下:我想通过这个答案知道,实际上是知道“3GHz”是什么意思。我完全清楚每赫兹的吞吐量因架构、硬件、缓存、总线速度和月球位置而有很大差异。
我不是在追求一个精确和科学的答案,而是一个可以放入可理解的尺度的经验答案。
这不是一个简单的地方答案(正如我注意到的那样),这是我最大的努力。我知道每行 C 的 ASM 结果行的数量取决于您在做什么。与- 我知道这i++
一点不在同一个街区。sqrt(23.1)
此外,无论我从 C 中得到什么 ASM,ASM 都会被解释为处理器内的各种微码集,这又取决于您运行的是 AMD、Intel 还是其他东西,以及它们各自的世代。我也知道这一点。
到目前为止,我得到的大致答案是我一直在追求的:一个足够大的项目平均每 1 行 ANSI-C 大约 2 行 x86 ASM。一旦流水线被填满并且给定足够大的样本,今天的处理器可能平均每个时钟周期大约有一个 ASM 命令。