Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;代码编译成汇编代码? < C++代码是否编译到汇编代码?如果我们有C++代码,我们能得到汇编代码吗?< /p>_C++_Assembly_Compilation - Fatal编程技术网

C++;代码编译成汇编代码? < C++代码是否编译到汇编代码?如果我们有C++代码,我们能得到汇编代码吗?< /p>

C++;代码编译成汇编代码? < C++代码是否编译到汇编代码?如果我们有C++代码,我们能得到汇编代码吗?< /p>,c++,assembly,compilation,C++,Assembly,Compilation,你的代码必须被机器理解,并且因为它没有被解释,也不能在VM中运行,所以它首先在程序集中被转换。您可以通过使用g++编译选项中的-S标志来获取此汇编代码(当然,只要您使用的是g++) 应该可以做到这一点。这取决于编译器。C++没有编译的真正规则,除非在某个时候它应该能够在计算机上运行。大多数编译器都有编译到汇编的开关 使用gcc,您可以添加-S以编译成.asm文件 < P>绝大多数C++编译器将C++源转换成目标文件(机器代码中有足够的控制信息,以链接到可执行文件)。实际上,它们可能会生成汇编

你的代码必须被机器理解,并且因为它没有被解释,也不能在VM中运行,所以它首先在程序集中被转换。您可以通过使用g++编译选项中的
-S
标志来获取此汇编代码(当然,只要您使用的是g++)


应该可以做到这一点。

这取决于编译器。C++没有编译的真正规则,除非在某个时候它应该能够在计算机上运行。大多数编译器都有编译到汇编的开关

使用gcc,您可以添加-S以编译成.asm文件


< P>绝大多数C++编译器将C++源转换成目标文件(机器代码中有足够的控制信息,以链接到可执行文件)。实际上,它们可能会生成汇编语言作为过渡步骤,甚至使用单独的汇编程序来处理汇编程序源代码,但您通常不会看到这一点。例如,您实际上必须通过使用
-s
标志来获得
gcc
以生成汇编代码(.s文件)。通常情况下,您永远不会看到部件

<>但是C++标准并不强制编译器输出的最终形式,只是代码在运行时必须以某种方式运行。 实际上,最早的C++编译器实际上生成了C源代码,然后编译成了.<
<>你可以让你的C++编译器生成目标代码,java字节码,甚至GWBASIC,如果你感觉受虐狂。

非常有信息性,只是一个问题,如何编译C++代码到java字节码?嗯,你必须编写编译器来完成这一任务。对不起,我并不是要暗示编译器有这样的操作,只是它是可能的和符合java编写标准的。MSVC可以编译到MSIL,它在概念上类似于Java字节码。@——我认为它会是一个吹嘘C++程序员的东西!MSalters托管和非托管代码都转换为MSIL?@MSalters,MSIL在概念上与JVM不同-它允许不安全的指针算术,并且存在混合模式程序集。但是,当然可以编译C++到JVM,当然,性能也会受到很大的影响。RE:关于汇编的部分:请看一些让人读起来更好的提示。还有Matt Godbolt的CppCon2017演讲:你的链接已经死了。
g++ -S -o file.s file.cpp