しかし内部ではちゃんと変化がある。
末尾に付けたtest.cというファイルは、
$ gcc test.c
でコンパイルできる。そして実行すると
int = 4
int* = 8
void* = 8
long int = 8
long long = 8
short int = 2
float = 4
double = 8
char = 1
wcahr_t = 4
となる。
これが32ビット版のLinux上では
int = 4
int* = 4
void* = 4
long int = 4
long long = 8
short int = 2
float = 4
double = 8
char = 1
wcahr_t = 4
となるはずだ。
long longが4->8バイトになっている以外に、ポインタが64ビットになっている事が分かる。64ビットアドレッシングになっているからだ。
ちなみに、amd64(64ビット版)の上でも32ビット版としてコンパイルすることはできる。
$ gcc -m32 test.c
とすれば良い。
ただしシステム全体は64ビットで、ライブラリ等ももちろん64ビット版としてコンパイルされているので、-m32でコンパイルするにはlib32で始まる32ビット用パッケージをインストールする必要がある。
$ apt-cache search lib32
などとすればそれらしいものが見付かる。
# filename: test.c
#include < stdio.h>
#include < wchar.h>
int main()
{
printf("int = %d\n", sizeof(int));
printf("int* = %d\n", sizeof(int*));
printf("void* = %d\n", sizeof(void*));
printf("long int = %d\n", sizeof(long int));
printf("long long = %d\n", sizeof(long long));
printf("short int = %d\n", sizeof(short int));
printf("float = %d\n", sizeof(float));
printf("double = %d\n", sizeof(double));
printf("char = %d\n", sizeof(char));
printf("wcahr_t = %d\n", sizeof(wchar_t));
}
0 件のコメント:
コメントを投稿