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版はどこに/なぜインストールされたのか? よくわかりません。