VMWare経由で使っているFedora 8をx86_64版にしてみた。ホストOSが32bitでもゲストOSを64bitにできるようです。えらいです。
VMを生成するときに警告が出てIntel VTが有効になってないとか言われたので、BIOSを眺めて有効にした。今まで有効だと思って「さすがに速いな…」とか呟いていたのだけど、間抜けでした。VMWareはコードのロード時にバイナリを書き換えて実行するときのオーバーヘッドを減らしているので、無効でもそこそこ速いはずです、というのは言い訳です。
確かに、こころなしか速くなってる気がしますね。気のせいかもしれません。
聞いていたとおり、ポインタとlongが64ビットになってますね。あと特に何かせずに普通にoff_tを使っても64ビットになっているので、面倒だったFILE_OFFSET_BITS=64も必要なくなります。あとは変わらず、かな。
# for i in char short int long "long long" quad_t "void *" off_t; do sh sizeof.sh "$i" sys/types.h ; done sizeof(char)=1 sizeof(short)=2 sizeof(int)=4 sizeof(long)=8 sizeof(long long)=8 sizeof(quad_t)=8 sizeof(void *)=8 sizeof(off_t)=8
スクリプトは以下の通り。
#! /bin/sh tmpf=$(mktemp) TYPE=$1 cat <<EOF > $tmpf.c #include <stdio.h> EOF shift for i; do echo "#include <$i>" >> $tmpf.c done cat <<EOF >> $tmpf.c int main(int argc, char **argv) { printf("sizeof($TYPE)=%d\n", sizeof($TYPE)); return 0; } EOF #cat $tmpf.c gcc $tmpf.c -o $tmpf && $tmpf rm $tmpf.c $tmpf
32bit版では以下のようになります。
sizeof(char)=1 sizeof(short)=2 sizeof(int)=4 sizeof(long)=4 sizeof(long long)=8 sizeof(quad_t)=8 sizeof(void *)=4 sizeof(off_t)=4
困ったことと言えば、gpassをx86_64用にコンパイルしたのだけど、いまいちうまく動かない。i386版のバイナリをそのまま入れたら動いた。上位互換なんですね。yumでいろいろ入れてもx86_64版とi386版の両方がインストールされるパッケージがあったりします。そのへんは謎。一応、実行されているのは64bit版のようですが、じゃあ32bit版はどこに/なぜインストールされたのか? よくわかりません。