请问在linux下如何判断当前系统是32bit还是64bit

wabc 2004-08-18 10:20:16
在C语言中需要在运行时判断当前系统的架构:32bit/64bit,不知道如何判断.
...全文
402 15 打赏 收藏 举报
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ruyedian 2004-10-19
学习
  • 打赏
  • 举报
回复
wabc 2004-10-18
Way79(Way)的方法在某些情况下并不能准确判断系统类型,因为需要编写跨平台C语言程序,所以还必须考虑以下情况:32位的程序可以在64位的系统下运行,我们就不能使用编译时(Compile-time)检测方法,而必须使用运行时(run-time)检测方法.
其实用uname就可以实现运行时检测,多数UNIX/LINUX系统也提供了该C语言库函数.

多谢各位.
  • 打赏
  • 举报
回复
yjf7888 2004-08-23
在(伪)64位系统下,指针也可以用编译器选项强制指定为32位的。我觉得应该判断long的字节数。
  • 打赏
  • 举报
回复
pacman2000 2004-08-23
另外:long是64位的。
  • 打赏
  • 举报
回复
cvsuser 2004-08-23
判断一个指针占几个字节,
4 个 32位
8 个 64位

========================================
感觉Way79的答案接近正解
  • 打赏
  • 举报
回复
flyinghawkren 2004-08-23
感觉Way79的答案接近正解
  • 打赏
  • 举报
回复
Letbeger 2004-08-23
up
  • 打赏
  • 举报
回复
xqg1130 2004-08-21
我也想要答案,幫樓主頂一下!!
  • 打赏
  • 举报
回复
collide 2004-08-20
32/64的区别之一是指针的长度从32转变到64位,所以,我赞同Way79的方法。
  • 打赏
  • 举报
回复
Way79 2004-08-20
and you should take care of the 64x32 cross compile
  • 打赏
  • 举报
回复
Way79 2004-08-20
In C:

#define IS64BIT (sizeof(void*)==8)
  • 打赏
  • 举报
回复
Way79 2004-08-20
please use "uname -m"

The result will be x86_64 on AMD Opteron and be ia64 on Intel Itanium
  • 打赏
  • 举报
回复
wabc 2004-08-20
up
  • 打赏
  • 举报
回复
wabc 2004-08-18
上面的程序还有一个错误是,int类型无论在32位还是在64位,都是32位的.

我的程序在32上编译,但可以在64位上运行,在某些情况在需要检测系统架构.
  • 打赏
  • 举报
回复
sivaaeik 2004-08-18
你这样看行不行
if (sizeof(int) == 4) {
//32位
}
else if (sizeof(int) == 8) {
//64位
}
else {
//重大发现
}

//不过这样实际上在编译的时候就确定了是32还是64位
//这样的程序实际上没有用,应为64位的x86程序肯定不能在64位的SPARC上运行
  • 打赏
  • 举报
回复
发帖
Linux/Unix社区

2.2w+

社区成员

Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
帖子事件
创建了帖子
2004-08-18 10:20
社区公告
暂无公告