Tutaj jest bardzo mały plik źródłowy w D:Dlaczego metoda main() skompilowana przez D ma 32-bitową wartość zwracaną na komputerze 64-bitowym?
void main()
{
}
i tutaj demontaż objdump w pliku .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
Kompilator jest DMD64 D Compiler v2.056 działa na Linux x86_64 maszyna.
Zastanawiam się, dlaczego tylko 32-bitowy EAX jest czyszczony zamiast całego 64-bitowego RAX? Zakładam, że jest to wartość zwracana, wymagana tak jak w programie C, nawet jeśli nie została potwierdzona w źródle D.
To nie wygląda na zoptymalizowany kod. Nie próbowałbym mówić o niezoptymalizowanym kodzie, ponieważ wiele rzeczy w nim zawartych jest całkowicie zbędnych i możliwych do uniknięcia, jak wszystkie powyższe instrukcje z wyjątkiem 'retq'. –