Intel 64

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です