(そういえば、以前FFIをサポートした際に問題になるかも的なことを書いたような・・・)
以下のコードが予想と違う。
#include <stddef.h> #include <stdio.h> struct align_struct { int value1; struct { int value2; char *str; } inner; }; int main (int argc, char **argv) { printf("offsetof: %d\n", offsetof(struct align_struct, inner)); return 0; }結果が、32bitのCygwin(多分32bitならどれでも同じ、と信じる)では、4。これは期待通り。で、X86_64では8。これが8になられると大問題で、なぜかといえば、以下のコードはどちらの環境でも4を返すから。
#include <stddef.h> #include <stdio.h> struct align_struct { char c; int x; }; int main (int argc, char **argv) { printf("offsetof: %d\n", offsetof(struct align_struct, x)); return 0; }何か勘違いしているのかもしれないのだが、FFIのサポートにlibffiを使っていて、アライメントの計算はそこにどっぷり依存している。
中身を展開してやったら期待通りの値になった。構造体のアライメントが変わってくるのかなぁ?単にフラットにしてくれれば問題ないのに。libffiをもう一回見直すか・・・
No comments:
Post a Comment