假设我不确定如何检查正在运行的操作系统。
所以我想使用下面的代码来确定:
#include <limits.h>
...
size_t os_size = sizeof(void*) * CHAR_BIT;
我可以100%依靠它吗,还是需要注意一些警告?
例如:
是否可以为32位操作系统安装编译器并在64位OS上正常工作?
谢谢
从理论上讲,您可以使用char
32位的C实现,sizeof(char)
= sizeof(int)
= sizeof(long)
= 1,可能sizeof(long long)
= 2;IIRC在Common Lisp(或也许只有SBCL)中对C的一些实验性实现正在做类似的事情。可悲的是,我忘记了细节。
在实践中,更好地利用<stdint.h>
给予int32_t
,int64_t
并且intptr_t
使得sizeof(intptr_t)
= sizeof(void*)
。
所以答案是否定的。
您可以使用<limits.h>
和INT_MAX
等...
您可以使用交叉编译器...(例如,在Linux x86-64桌面上编译带有交叉GCC的32位ARM android平板电脑)。
您可能要使用autoconf之类的东西。阅读有关GCC通用预定义宏的信息。也许你想要__LP64__
并且您可能在x86-64上具有支持64位的Linux操作系统,但是在chroot
提供32位环境(带有32位libc,32位编译器等)的-ed环境(或docker容器)中运行。这实际上是有用的(例如,在64位Linux便携式计算机上进行测试,可以在32位上编译和执行您的应用)。参见例如schroot。大多数Linux x86-64系统都能够运行32位x86 ELF二进制文件(至少在静态链接的情况下)。顺便说一句,在我的Linux / Debian / x86-64系统上,它gcc -m32
会生成32位的目标文件和可执行文件,但是gcc -m64
或者只gcc
提供了64位...
在POSIX系统上,要查找有关您的机器的信息,请使用uname(2)。在Linux上,您甚至可以读取和解析/proc/cpuinfo
(以及,下的其他一些文件/proc/
,请参见proc(5))。
我对Windows一无所知。如果使用它,则应尝试Linux。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句