Chinaunix

标题: 请问怎么用程序判断cpu是32位的还是64位的 [打印本页]

作者: scudong    时间: 2009-10-21 19:36
标题: 请问怎么用程序判断cpu是32位的还是64位的
如题
作者: prolj    时间: 2009-10-21 19:38
安装x64的Ubuntu试试看行不行。
作者: emperor    时间: 2009-10-21 20:38
0.  uname -a
1.  getconf LONG_BIT
2.  cat /usr/include/asm/cpufeature.h
.......
作者: drangon    时间: 2009-10-21 23:03
程序编译的时候,已经决定了能运行的CPU的数量,例如x86下的程序不能在mips CPU运行,mips程序不能在arm CPU运行
x86_64 的程序不能在x86的CPU下运行,但x86的程序可以同时在x86和x86_64的CPU下运行,这是可以使用cpuid指令来判断。

如果是在虚拟机,或者类似虚拟机(例如安腾平台下跑的x86程序)下酒没办法了

如果是x86_64平台下装32位操作系统,使用uname, getconf, cat /usr/include/xxx 等方法不能得到CPU的正确信息
作者: prolj    时间: 2009-10-21 23:23
就直接在机器上装64位系统,32位机肯定装不上。
/usr/include/xxx纯属扯淡
别扯什么虚拟化了,分清模拟器的概念吧,龙芯3模拟x86谁知道能不能模拟x64啊。
作者: emperor    时间: 2009-10-22 07:42
瓜娃。。。。。。
作者: xxw19840406    时间: 2009-10-22 18:11
是否可以通过sizeof(int)得到呢
作者: ge-hw    时间: 2009-10-22 18:59
标题: 指针长度*8比较保险
char *p;
len=sizeof(p)*8;
作者: prolj    时间: 2009-10-22 19:54
long的长度都是扯淡,不懂就不要装B了,在x64的机器上装32位系统打印long的长度能看出来个毛。
uname -a有多少关于CPU的信息?不过是cpuifo指令而已,用过cpuinfo这条指令的人都不会想出这么SB的办法。
/usr/include/asm/cpufeature.h 更是SB,那是源代码,不是实际跑的代码。

实践是检验真理的唯一标准,Intel说是64位就是64位?其实地址线还是40位/52位的?
装B,继续装B,你Y的不懂就趁早滚蛋,别在这儿误导人 在技术版,没人尊重你,你Y可以跟自己的员工装B,人家不敢得罪你是因为你Y的钱,在bbs上,装B有个毛用啊,还不如练习一下cpuinfo指令怎么用再出来装B呢。
越是掩饰,就越是显示无知,无知者无畏呵。

在x64的机器上装一个32位系统打印一下long的长度去,多找几个64位和32位系统看看uname -a的结果去,/usr/include/asm/cpufeature.h这种SB想法就不用出来扯淡了,在x64的机器上装32位的系统,OS怎么会使用64位的资源?用64位寄存器么?

别扯没用的,有什么本事亮出来,装B的假大空是孙子。

[ 本帖最后由 prolj 于 2009-10-22 20:09 编辑 ]
作者: peidright    时间: 2009-10-22 21:03
我喜欢游荡于装A与装C之间。。。。
作者: mik    时间: 2009-10-22 21:18
大婶现在更年期中?  越来越冲了
作者: prolj    时间: 2009-10-23 15:05
我记错了,是cpuid指令
作者: yulihua49    时间: 2009-10-23 16:20
原帖由 scudong 于 2009-10-21 19:36 发表
如题

  1. if (sizeof(long)==8) 64bit
复制代码

作者: lllaaa    时间: 2009-10-23 19:00
原帖由 yulihua49 于 2009-10-23 16:20 发表


if (sizeof(long)== 64bit



这个只能说明编译器是不是64位的
作者: _小小思    时间: 2009-10-23 19:09
查手册 写个 读CPU型号的 函数
作者: foonix    时间: 2009-10-23 22:23
饶有兴致的查了下Intel手册cpuid的指令,应可做如下判断:
int isIA64(void)
{//example for intel cpu only
   int ia64;
   __asm("movl $0x80000001,%%eax\n"
         "cpuid\n"
         "shr $29,%%eax\n"
         "and $1,%%eax\n"
         :"=r"(ia64));
   return ia64;
}

上述在执行cpuid后,判断eax中的bit[29]是否为1来判断是否是64位。
上述代码编译成32位程序。
作者: prolj    时间: 2009-10-23 22:47
IA64是IA64,这个没用过还不清楚,我以前本子是Core 2的,x64的Linux,cpuid的结果是intel genric,一点有用的信息都没有。
作者: emperor    时间: 2009-10-23 22:56
原帖由 prolj 于 2009-10-22 19:54 发表
long的长度都是扯淡,不懂就不要装B了,在x64的机器上装32位系统打印long的长度能看出来个毛。
uname -a有多少关于CPU的信息?不过是cpuifo指令而已,用过cpuinfo这条指令的人都不会想出这么SB的办法。
/usr/ ...

卧槽,以为老子不会骂人怎么的,操蛋玩意儿像个疯狗似的,满论坛倒垃圾
jw个JB毛阿,就你这样250的也就能唬那些真装b的傻子,遇到俺这样的大JJ,你就是个真13,老子想怎么干怎么干。。。。
作者: prolj    时间: 2009-10-23 23:08
等着这个帖子被锁,狗急跳墙了,跳梁小丑了,没本事就骂街了,装B侧漏了,真TM费劲,又一个大神现身了。
作者: emperor    时间: 2009-10-23 23:19
自己理解不了就是别人装13,是因为你不用装就直接是13了,俺只能这么理解
uname里没有信息?
Long_BIT没意义?
虚拟机?你直接扒开机箱把cpu拿下来然后查spec最能确定是吧
疯狗你可以继续叫
发完这个俺不会再理狗吠。。。。。。。
作者: prolj    时间: 2009-10-23 23:26
没见过一点儿实际内容,反正KVM里面没一行代码,咋了,跳墙了?侧漏了?小丑继续。哎呀,中关村装机的就是黑会装啊。
作者: prolj    时间: 2009-10-24 12:06
记住,是我欺负你,因为我看不起你,因为你水平不如我,你就认了吧,看图,在x64的Ubuntu下面安装i386的SuSE,uname个几把毛啊,我就这么不依不饶的,在CSArch方面跟老娘装B,滚蛋吧!

snapshot2.png (250.93 KB, 下载次数: 68)

snapshot2.png

作者: prolj    时间: 2009-10-24 12:16
麻烦有一点软件和硬件的常识在出来丢人现眼好不好?不是说装个VMWare就是虚拟化大牛了,也不是说在bbs上说一些假大空的话别人就会信服你,尊重你,我就不告诉你,让你一辈子都不懂,我就这么坏,就气着你,反正丢人的是你。不懂就不要装大,回家好好学习去,30了还这水平就太可悲了。你这辈子技术方面算是完了。
不要以为看两本书或者两篇垃圾paper就觉得自己上天了,谁都是从那个阶段过来的,哦,完了,30了才经历这个阶段好像很可悲哦。别嫌我说话难听,尊重是靠自己挣的,不是别人给的。
可以去找“大牛”跟我PK,如果我技不如人的话我认了,但那样我仍然会BS你,因为你还是废物一个。
技术没用的话不用跟我扯,我喜欢的事情我会坚持,商业上成功与否是我自己的事情。
麻烦不要看我不顺眼,因为你根本没那个资格,有本事就强过我。
作者: prolj    时间: 2009-10-24 12:39
long也是扯淡,虚拟机是32位的,host是64位的,看你还怎么狡辩,跟我装,你没那个本事,被我拆穿了很不爽?那就不要装。到底是谁不懂?看图说话。

snapshot3.png (189.59 KB, 下载次数: 56)

snapshot3.png

作者: prolj    时间: 2009-10-24 12:41
两个可测试的办法我都做了,都用事实证明了,那个xxx/include/我就不知道怎么测试了,因为我系统编程半窍不通,C版熟悉内核的人很多,我就不敢墨迹了。
大家都是明眼人,谁不懂谁知道,一边凉快去。
作者: emperor    时间: 2009-10-24 14:34
大牛,俺错了,其实俺真的什么都不知道,只有一点点的浅薄的基础知识.在看见LZ发帖后,俺就有这个几个思路,斗胆说出来了,不想冒犯您老人家了
1.uname 如果对这个命令是否能辨别cpu,其实可以看看uname.c 对了,据说大牛你是专门搞c的。俺对c是一点都不懂,只记得其中好像有processor。 type之类的字眼。通常i386/i686表示32 而x86_64表示64。
2。对于long大牛你真费了不少力气。在提示符下跑一下“getconf LONG_BIT” 很累吧
3。大牛你认为这个是个静态的。俺不知道怎么答复。估计说破天也说不开窍
说到虚拟机,俺已经都不敢自信了,因为大牛你太牛了。俺只知道虚拟机下得到是虚拟的。到底是想知道host还是guest的取决于个人吧
   俺所有的假设前提都是系统已经装好也已经运行了。系统也都是标准的。
最后,俺只想说,俺十分厌恶一如你这样的苍蝇和蚊子,无论你是大牛还是小牛。。。。。。。
作者: prolj    时间: 2009-10-24 14:43
很累,真TM累,以后看见我最好躲着。
有图有真想,当五毛的都知道,千行文字敌不过一张图片。

snapshot4.png (124.81 KB, 下载次数: 53)

snapshot4.png

作者: emperor    时间: 2009-10-24 16:16
大牛,给解释下图到底说明了什么啊
告诉大家大牛你会用vBox?
告诉大家虚拟机上得不到host cpu的信息?
蚊子就是蚊子,聒噪且令人生厌。。。。
作者: emperor    时间: 2009-10-24 17:37
原帖由 prolj 于 2009-10-23 15:05 发表
我记错了,是cpuid指令

爷告诉你,你不是记错了,是JJ错了,有空赶紧切了去
爷要说cpuinfo的lm,估计都是对驴弹琴。。。。。。。。。
作者: prolj    时间: 2009-10-24 17:54
继续,继续,继续跳墙,还是拿不出来一点实际东西。反正你那点儿水平出来丢人已经丢够了
作者: wishel    时间: 2009-10-24 18:13
蛋腚。。。讨论问题不要涉及人身内容,别上火,身子要紧哈
作者: gofortime    时间: 2009-10-24 19:25
估计有人更年期吧,纯粹技术讨论,至于...
作者: lazywrite    时间: 2009-10-25 11:20
肃静,肃静,县太爷来了,都回避!
作者: lllaaa    时间: 2009-10-25 11:23
原帖由 prolj 于 2009-10-23 22:47 发表
IA64是IA64,这个没用过还不清楚,我以前本子是Core 2的,x64的Linux,cpuid的结果是intel genric,一点有用的信息都没有。



cpuid指令参数不同返回的信息不同的。intel据说有个100页的文档专门介绍这个指令的参数及返回值。
作者: lllaaa    时间: 2009-10-25 11:29
原帖由 prolj 于 2009-10-24 14:43 发表
很累,真TM累,以后看见我最好躲着。
有图有真想,当五毛的都知道,千行文字敌不过一张图片。


你这个例子不能说明问题的。虚拟机里面当然得到的是虚拟机里面跑的操作系统的信息。在宿主机上运行自然是宿主机的信息。
作者: ichaochao    时间: 2009-10-25 14:00
坐山观虎斗,好玩,也学到了点东西,谢谢呀!!
作者: buaachenhao    时间: 2009-10-25 14:57
查一下支持的指令集不就知道了!
作者: prolj    时间: 2009-10-25 15:18
标题: 回复 #35 lllaaa 的帖子
Atom本子上装x86的Linux,打印信息也都是x86的。我知道可以获得x64的信息,但是绝不是那种幼稚手段。
作者: xdolt    时间: 2009-10-25 18:19
想问一下cpuinfo不可以识别么:
/proc/cpuinfo
This is a collection of CPU and system architecture dependent items, for each supported architecture a different list. Two common entries are processor which gives CPU number and bogomips; a system constant that is calculated during kernel initialization. SMP machines have information for each CPU.

ps:我只想讨论,不想引来人生攻击,并且在此论坛我也没有攻击过任何人。人技术再牛,也不可能所有方面都牛,也难做到一辈子牛。个人偏见的认为技术无用论及技术狂躁症大都是技术行业的失败者。
作者: xdolt    时间: 2009-10-25 18:22
我只做过solaris及x86下的linux开发,更没接触过嵌入式,所以说错的地方,感谢大家耐心指出,有过激的言论就免了,直接无视本人回复即可。
作者: emperor    时间: 2009-10-25 19:11
标题: 回复 #39 xdolt 的帖子
可以的阿,lm flag。。。。。
作者: folklore    时间: 2009-10-25 21:48
原帖由 prolj 于 2009-10-23 22:47 发表
IA64是IA64,这个没用过还不清楚,我以前本子是Core 2的,x64的Linux,cpuid的结果是intel genric,一点有用的信息都没有。


CPUID指令是一个“功能调用”,根据EAX(64位的话应当是RAX吧了,也可能只认EAX,没有64位机器没法试)的值的不同,返回不同的信息。Intel的机器CPUID的信息较多。AMD的功能很少。你应当试试使用其它的EAX值...

PS:我也不知道能不能用CPUID看是否64位机器,不妨查查Intel和AMD的Datasheet
作者: sa4563    时间: 2009-10-26 09:29
提示: 作者被禁止或删除 内容自动屏蔽
作者: 弥敦路九号    时间: 2009-10-26 10:26
标题: cpuinfo 之 lm flag
lm flag 不行吗?

http://www.linuxquestions.org/qu ... nfo-flag-lm-358563/
"The lm flag indicates that the CPU is a 64-bit proc. Thus, all x86-64 cpus have it, and no 32 bit CPUs have it. From /usr/include/asm/cpufeature.h: #define X86_FEATURE_LM (1*32+29) /* Long Mode (x86-64) */
"
32bit OS 上也可以看到lm flag的.
---------------------------------------------
[root@ca-ostest290 ~]# fgrep flags /proc/cpuinfo | grep lm
flags           : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm
flags           : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc up pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm
flags           : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc up pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm
flags           : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc up pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm
flags           : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc up pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm
flags           : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc up pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm
flags           : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc up pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm
flags           : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc up pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm
[root@ca-ostest290 ~]# arch
i686
---------------------------------------------
作者: denghaipeng    时间: 2009-10-26 14:27
那个喜欢乱骂人的大婶你TMB识字吗?没看清楚楼主问的问题?楼主是问怎么用程序判断
你TMB就只会装系统啊?还找你MB的UBUNTU64位系统装呢?这就是你的本事
我路过的,我是新人,也承认自己不行,想不出您这么高明的办法?
就比如说我们要判断一只鸡是公的还是母的难道要在旁边蹲着等看它会下蛋不?
你这么喜欢装13啊,是不是现实生活中各种欲求不满B烂了啊,用你的话说,我就是喜欢骂你。有本事你来咬我啊
杂种狗
人家好心来讨论技术你来干毛啊?就算说的不对又得罪你了?
你不是这样成长的?你看你那泼妇样,你自己能说清楚你截几个破图能说明什么?你怎么不干脆给你CPU的包装盒找来拍个照啊?
爷就是想骂你。代表广大爱好技术即使不熟练却勇于讨论的人鄙视你个臭不要脸的
you make me sick!
作者: prolj    时间: 2009-10-26 14:40
SB MJ
看不懂?活该!不会,活该!跳墙吧。你咬我啊,反正是你不会,o(∩_∩)o...哈哈

[ 本帖最后由 prolj 于 2009-10-26 14:46 编辑 ]
作者: linuxlixk    时间: 2009-10-26 14:48
标题: 回复
jjjjwqvcvc

[ 本帖最后由 linuxlixk 于 2010-1-13 10:01 编辑 ]
作者: prolj    时间: 2009-10-26 14:51
我操,MJ真多啊,连64位机上装32位系统什么意思都不懂还好意思发动五毛党?
作者: vtte0051    时间: 2009-10-26 16:17
prolj 说得对,楼主要的是判断cpu的类型,而不是操作系统是32还是64
作者: emperor    时间: 2009-10-26 17:39
标题: 回复 #45 denghaipeng 的帖子
真突然阿。。。。。。
作者: emperor    时间: 2009-10-26 17:39
标题: 回复 #49 vtte0051 的帖子
啊?大家一直都在讨论cpu的类型阿,谁说os了?。。。。。。。
作者: denghaipeng    时间: 2009-10-26 18:57
真是白瞎了
跟装13的没法交流
貌似都没看到任何有助于解决问题的建议
作者: denghaipeng    时间: 2009-10-26 19:06
你不是牛吗?煞笔,马甲
你不会看IP?
作者: liuweni    时间: 2009-10-26 21:32
cat /proc/cpuinfo
作者: sairy    时间: 2009-10-26 22:37
标题: 回复 #5 prolj 的帖子
关于您在5楼的回复,我有个小问题 为什么32位的机子肯定装不上呢? 如果这个正好是一个X86_64架构的,可以装一个32位的os呢?
本人菜鸟,请教一下,不甚感激! 我觉得4楼drangon的回复很有道理,应该是正确的,不知大侠如何看?
作者: spook    时间: 2009-10-27 09:29
标题: 判断不了
操作系统内核决定了……
作者: yhyaohu    时间: 2009-10-27 16:08
学习……
作者: srdgame    时间: 2009-10-30 17:12
原帖由 emperor 于 2009-10-21 20:38 发表
0.  uname -a
1.  getconf LONG_BIT
2.  cat /usr/include/asm/cpufeature.h
.......

这是要察看系统是不是64的吧,系统是不是64跟CPU是不是64并不等价
作者: 克拉玛依    时间: 2009-10-30 18:00
cd /usr/bin

file cp
作者: tcwn_feng    时间: 2009-10-31 02:34
说句错话就得挨骂?  什么世道~~~
这个世界上竟然有这样的人,太奇妙了。。。
真是什么鸟都有
作者: 为什么删我号    时间: 2009-10-31 09:43

作者: zttyler    时间: 2009-10-31 17:59
我喜欢游荡于装A与装C之间。。。
作者: wss8848    时间: 2010-08-26 15:32
好贴  深受启示!
作者: the_gadfly    时间: 2010-08-26 15:55
路过+鄙视+感动+看开




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2