微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

每个C指令有多少个asm指令?

我意识到这个问题是不可能绝对回答的,但我只是在球场数字之后:

给定一个合理规模的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命令,一旦管道被填满,并给出一个足够大的样本.

解决方法

我不知道你的意思是“C指令”,也许是声明或行?当然这会因为很多因素而有所不同,但是在查看了我自己的几个示例程序之后,其中很多都接近2-1标记(每个LOC有两个装配说明),我不知道这是什么意味着或如何有用.

您可以通过要求编译器仅生成程序集(例如gcc -S)或通过在已编译的可执行文件上使用反汇编器(但需要源代码进行比较才可以)了解出任何特定的程序和实现组合无论如何).

编辑

根据您对您要完成的内容的澄清(了解现代处理器可以在一秒钟内执行多少行代码)进行扩展:

而现代处理器可能以每秒30亿个周期的速度运行,并不意味着它可以每秒执行30亿条指令.这里有一些需要考虑的事情:

>许多指令执行多个周期(分割或浮点运算可能需要数十个周期才能执行).
大多数程序花费绝大多数时间等待内存访问,磁盘访问等等.
>包括操作系统开销(调度,系统调用等)在内的许多其他因素也是限制因素.

但总的来说,处理器速度非常快,可以在短时间内完成惊人的事情.

原文地址:https://www.jb51.cc/c/113543.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐