GCC Wikia
Advertisement

このページを編集する際は,編集に関する方針に従ってください.[]

概要[]

  • gcc-4.1.0/libiberty/obstack.cにて定義
  • この大きさで割り切れるバイト列が扱いやすい
  • fooalignの中のdまでの距離(x + パディング)からalignmentが分かるらしい
    • doubleが浮動小数点型であることに関係がある?

実装[]

59: #define DEFAULT_ALIGNMENT  \
60:   ((PTR_INT_TYPE) ((char *) &((struct fooalign *) 0)->d - (char *) 0))

== テスト  ==
  #include <stdio.h>
  
  #define PTR_INT_TYPE long
  
  struct fooalign {char x; double d;};
  #define DEFAULT_ALIGNMENT  \
     ((PTR_INT_TYPE) ((char *) &((struct fooalign *) 0)->d - (char *) 0))
  
  int main()
  {
          printf("%d\n", (int)(&((struct fooalign *)0)->d));
          printf("%d\n", (int)DEFAULT_ALIGNMENT);
          return 0;
  }

動作がよく分からなかったので、上のコードでテスト。
大学のWS(SunOS 5.9 Generic_117171-17 sun4u sparc SUNW,Sun-Blade-100 Solaris : unameのホスト名以外の情報。一応64bitCPUだったはず)で実行してみたところ、
~
8
8
~
と表示された。
(char *)0を引いている理由はなんだろう?

~


リンク元

Advertisement