编译C/C++代码时,它会生成汇编代码。如果我有Windows和Linux双启动(即完全相同的处理器),并且我在Windows和Linux上用C++写了一个程序,那么
编译后的汇编代码(链接前)会不会对不同的?
我的意思是,可执行文件之间的区别是链接器,写吗?但我不是在说可执行文件...我说的是链接前的汇编代码。
如果这两个汇编代码是不同的,那么它们为什么和如何不同?
库是预编译的,所以这可能是我认为的不同之处(如果不是,请纠正我)。但是如果我不使用库呢?
发布于 2013-02-24 18:45:12
不同的OSes使用不同的可执行文件格式。
它们还通过不同的API提供其功能(fopen()最终将在32位Windows上使用int 0x2E或sysenter调用CreateFileA(),在32位Linux上使用int 0x80调用open() ),这些API在内部以不同的方式运行。所以在你程序的fopen()中会有不同的代码。
不同的编译器可以使用不同的默认调用约定,或者相同的编译器可以对不同的目标OSes使用不同的调用约定。即使在同一个编译器上,不同的优化和调试选项也会影响代码生成。
最后,不同的编译器也可以生成非常不同的代码,即使其他一切都是一样的,即使您不使用任何库(这通常是一件没有意义的事情)。这很简单,因为它们不使用完全相同的算法,也不是由相同的人编写的,并且没有人强制要求所有编译器的行为都相同。
不管怎样,你的问题的意义是什么?
发布于 2013-02-24 18:18:25
汇编代码将是相同的,只要你不必使用系统调用-这意味着你不能读取输入,也不能执行输出,甚至不能结束程序-什么都不能。
所以,除了一个完全无用的程序,它不能做输入和输出,你必须手动杀死它,你不能创建一个在几个操作系统上通过相同代码的二进制程序,在任何地方都做同样的事情。
https://stackoverflow.com/questions/15050662
复制相似问题