D の非常に小さなソース ファイルを次に示します。
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
コンパイラは、x86_64 Linux マシンで実行される DMD64 D コンパイラ v2.056 です。
64 ビットの RAX 全体ではなく、32 ビットの EAX だけがクリアされるのはなぜでしょうか? これは、D ソースでは認められなくても、C プログラムと同じように必要な戻り値であると想定しています。