The BAQ/Memo/Linux C/32Bitと64Bit CPU

Japanese English
Nuclear Physics Data Acquisition Orchestra Gallery Memo Diary Link Home
Linux C Fortran Postscript Home

もどる

当たり前ですが、32Bit CPUと64Bit CPU上のLinuxでは変数のサイズが違うものがあります。
あと、sizeofの返り値が32Bit CPUでは4Byte intだったのが64Bit CPUでは8Byte intになってます。
以下、変数の対応表(単位はByte)。

32Bit 64Bit
void* 4 8
char 1 1
short 2 2
int 4 4
long 4 8
long int 4 8
long long int 8 8

特に構造体を使う時は注意が必要で、

struct test{
 int a;
 long long int b;
}

とやった場合、32bit CPUではサイズは4+8=12ですが、64bit CPUでは16になります。
例えばaの先頭アドレスを0とすると、32bit CPUではbの先頭アドレスは4ですが、64bit CPUではbの先頭アドレスは8になります。

struct test{
 int a;
 int dummy;
 long long int b;
}
などとしてあげると32bit <=> 64bit間で整合性を保つことができます。
struct test2{
 char a[5];
 short b;
 int c;
 long long int d;
}
なんてことをするとややこしそうですが、int cとlong long int dの間にダミーのint = 4byteを入れてあげれば大丈夫です。

Last Update: 2009/2/19
Hidetada Baba
baba rarfaxp.riken.jp