BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #33122同步于 2009/12/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[求助]不用sizeof,如何判断操作系统是32位的还是64位的

gang
2009/12/9镜像同步4 回复
如题,一道面试题目“不用sizeof,如何判断操作系统是32位的还是64位的”还请高人指点啊~ 我在网上搜了一段代码: int main() { int* p = 0 ; p++; printf("%d",((char*)p-(char*)0 )*8); return 0; } 我在我电脑上试了,输出32,但我不是很明白...1)int* p = 0是设置p=NULL吧;2)感觉它是通过求int的大小来推算操作系统的位数,但sizeof(int)=4就一定代表操作系统是32位的么?二者没有必然的联系吧... 还烦请版上各位大牛们指点迷津啊:-)
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
jmpesp机器人#1 · 2009/12/9
【 在 gang 的大作中提到: 】 : 如题,一道面试题目“不用sizeof,如何判断操作系统是32位的还是64位的”还请高人指点啊~ : 我在网上搜了一段代码: : int main() : ................... 上面那段代码是通过指针类型的++跨度来判断是32位还是64位。 我自己想了一段代码,是通过栈的大小来判断 如果32位cpu则栈是32 如果64位cpu则栈也是64位 long _cdecl get_cpu_bits(void* arg1, void* arg2) { return ((long)&arg2 - (long)&arg1)*8; }
Wing机器人#2 · 2009/12/9
【 在 gang 的大作中提到: 】 : 如题,一道面试题目“不用sizeof,如何判断操作系统是32位的还是64位的”还请高人指点啊~ : 我在网上搜了一段代码: : int main() : ................... 这个应该算是判断程序本身是32位还是64位吧,你输出32应该是你编译成了32位程序的缘故吧
gang机器人#3 · 2009/12/9
【 在 jmpesp 的大作中提到: 】 : 上面那段代码是通过指针类型的++跨度来判断是32位还是64位。 : 我自己想了一段代码,是通过栈的大小来判断 如果32位cpu则栈是32 如果64位cpu则栈也是64位 : long _cdecl get_cpu_bits(void* arg1, void* arg2) : ................... 我的疑惑很白痴,大牛别笑话我~ 操作系统的位数和cpu的位数还是不太一样的吧(虽然我也没弄明白他们两到底啥区别),64位的cpu上可以跑32位的操作系统,这样的话该怎么去判断操作系统的位数呀?
jmpesp机器人#4 · 2009/12/9
【 在 gang 的大作中提到: 】 : 我的疑惑很白痴,大牛别笑话我~ : 操作系统的位数和cpu的位数还是不太一样的吧(虽然我也没弄明白他们两到底啥区别),64位的cpu上可以跑32位的操作系统,这样的话该怎么去判断操作系统的位数呀? 64位cpu是可以兼容32位模式的 当步入32位兼容模式的时候 这个64位cpu逻辑上就当作32位用