64bit変数はどうやってメモリに格納される?

当り前のことですが、後輩に質問されたのでメモメモ。

  • unsigned intの場合
#  define UINT_MAX      4294967295U
int main(void){
  unsigned int i = UINT_MAX;
}
main:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $8, %esp
        andl    $-16, %esp
        movl    $0, %eax
        subl    %eax, %esp
        movl    $-1, -4(%ebp)
        leave
        ret
  • unsigned long long int の場合
#define ULLONG_MAX      18446744073709551615ULL
int main(void){
  unsigned long long l = ULLONG_MAX;
}
main:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $8, %esp
        andl    $-16, %esp
        movl    $0, %eax
        subl    %eax, %esp
        movl    $-1, -8(%ebp)
        movl    $-1, -4(%ebp)
        leave
        ret

単純に、二つ並べて格納してるだけです。