最近要寫一些hvm虛擬機windows調用xen中hypercall的代碼,發現一個問題就是unsigned long在windows中和linux中代表的位數不同,因此想調查一下。
使用測試程序:
#include
int main()
{
printf("unsigned long long: %d\n", sizeof(unsigned long long));
printf("unsigned long: %d\n", sizeof(unsigned long));
printf("unsigned int: %d\n", sizeof(unsigned int));
return 0;
}
在linux下,得出的位數為:
unsigned long long: 8*8
unsigned long: 8*8
unsigned int: 4*8
windows下,得出的位數為:
unsigned long long: 8*8
unsigned long: 4*8
unsigned int: 4*8
由此可知,在windows下unsigned long是32位,在linux中是64位,至於為何這樣,還不太清楚是怎樣的歷史淵源。。