6
這裏是d一個非常小的源文件:爲什麼D編譯的main()在64位機器上有一個32位的返回值?
void main()
{
}
這裏的.o文件將objdump的的的拆卸:
Disassembly of section .text._Dmain:
0000000000000000 <_Dmain>:
void main()
0: 55 push %rbp
1: 48 8b ec mov %rsp,%rbp
4: 31 c0 xor %eax,%eax
{
6: 5d pop %rbp
7: c3 retq
編譯器DMD64 d編譯器v2.056上的x86_64的Linux上運行機。
我想知道爲什麼只有32位EAX被清除而不是整個64位RAX?我認爲這是一個返回值,就像在C程序中一樣,即使沒有在D源中確認也是如此。
這看起來不像優化的代碼。我不會嘗試推理未優化的代碼,因爲其中的許多內容都是完全冗餘的,並且可以像上面的所有指令一樣避免,除了'retq'。 –