给定一个合理规模的C程序(数千行代码),平均来说,将生成多少ASM指令.换句话说,什么是现实的C-to-ASM指令比率?随意做出假设,例如“使用当前x86架构”.
我尝试过Google,但我找不到任何东西.
附录:注意到这个问题带来了多少混乱,我觉得需要一个解释:我想知道的这个答案是实际上知道“3GHz”是什么意思.我完全知道,Herz的吞吐量根据架构,硬件,高速缓存,总线速度和月球位置而有很大的不同.
我不是在一个精确和科学的答案之后,而是一个经验答案,可以被置于可比较的范围.
这不是一个微不足道的答案(当我注意到),这是我最大的努力.我知道每行C的ASM结果行数量取决于你在做什么.我不在sqrt(23.1)的同一个社区 – 我知道这一点.另外,无论我从C中得到什么ASM,ASM被解释成处理器内的各种微码集,这又取决于你是运行AMD,Intel还是其他的,以及它们各自的代码.我也知道这一点.
球场答案我已经到目前为止我已经做了以下工作:一个足够大的项目,平均每一行ANSI-C大约2行x86 ASM.今天的处理器可能会在每个时钟周期平均约一个ASM命令,一旦管道被填满,并给出一个足够大的样本.
解决方法
您可以通过要求编译器仅生成程序集(例如gcc -S)或通过在已编译的可执行文件上使用反汇编器(但需要源代码进行比较才可以)了解出任何特定的程序和实现组合无论如何).
编辑
根据您对您要完成的内容的澄清(了解现代处理器可以在一秒钟内执行多少行代码)进行扩展:
而现代处理器可能以每秒30亿个周期的速度运行,并不意味着它可以每秒执行30亿条指令.这里有一些需要考虑的事情:
>许多指令执行多个周期(分割或浮点运算可能需要数十个周期才能执行).
大多数程序花费绝大多数时间等待内存访问,磁盘访问等等.
>包括操作系统开销(调度,系统调用等)在内的许多其他因素也是限制因素.
但总的来说,处理器速度非常快,可以在短时间内完成惊人的事情.