C/C++:判断机器是32位还是64位
要求是不使用sizeof,一开始写了个看似可以,但是有问题的方法:
long* a = NULL; long* b = a + 1; int n = (char*)b - (char*)a;
这个方法等价于sizeof(long),但这其实有问题,在32位编译器上编译得到的代码在64位机器上得到的结果还是n=4,如果是64位编译器那么得到n=8。
上面的思路其实有问题,因为类型的大小依赖于编译器。从另外一个方面来想,指针的大小是机器决定的(有问题),所以如果能够使用sizeof的话,直接根据sizeof(int*)就可以判断了。要求不使用sizeof的话,可以通过如下方法实现:
int* ps[2]; int n = (char*)&ps[1] - (char*)&ps[0];
即通过一个指针数组内相邻元素的偏移量来找出一个指针元素的大小。
不过话又说回来sizeof的结果是编译时得到的,那么把编译后的程序换到其他环境下运行不是也不准确了。