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

wabc 2004-08-18 10:20:16
在C语言中需要在运行时判断当前系统的架构:32bit/64bit,不知道如何判断.
...全文
459 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
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上运行

23,216

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧