The BAQ/Memo/Linux C/32Bitと64Bit CPU
もどる
当たり前ですが、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