Ecco un piccolo file sorgente in D:Perché main() compilato da D ha un valore di ritorno a 32 bit su una macchina a 64 bit?
void main()
{
}
e qui lo smontaggio di objdump del file .o:
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
Il compilatore è DMD64 D Compiler v2.056 in esecuzione su un Linux x86_64 macchina.
Quello che mi chiedo è perché solo l'EAX a 32 bit viene eliminato piuttosto che l'intero RAX a 64 bit? Presumo che questo sia un valore di ritorno, richiesto proprio come in un programma C anche se non riconosciuto in D source.
Questo non sembra un codice ottimizzato. Non proverei a ragionare sul codice non ottimizzato perché molte cose in esso sono completamente ridondanti ed evitabili come tutte le istruzioni precedenti eccetto 'retq'. –