您将如何了解操作系统的一些细节?提前致谢。
4 回答
在 linux 中,这样一个通用问题的答案就是使用
uname -m
甚至:
getconf LONG_BIT
在 C 中,您可以使用 uname(2) 系统调用。
在 Windows 中,您可以使用:
systeminfo | find /I "System type"
甚至检查环境:
set | find "ProgramFiles(x86)"
(或在 C 中使用 getenv() )
原始问题:
如何用 C 或其他方式知道操作系统的位?
正确的方法是使用一些系统 API 或命令来获取架构。在 C 中比较sizeof
不会给您系统指针大小,而是目标体系结构的指针大小。这是因为大多数架构/操作系统都是向后兼容的,因此它们可以毫无问题地运行以前的 16 位或 32 位程序。即使在 64 位操作系统上,32 位程序的指针仍然是 32 位长。甚至在 64 位架构上,一些操作系统可能仍然使用 32 位指针,例如x32-abi
如果你使用 c,你可以获得 sizeof(void*) 或 sizeof(long) .if =8 then 64bits else 32bits.It's the same to all arch.
我很抱歉我的粗心和错误。它仅适用于 linux。在 Linux Device Driver 3rd,11.1 部分:使用标准 C 类型。它说
该程序可用于显示长整数和指针在 64 位平台上具有不同的大小,如在不同的 Linux 计算机上运行该程序所示:
arch 大小:char short int long ptr long-long u8 u16 u32 u64
i386 1 2 4 4 4 8 1 2 4 8
阿尔法 1 2 4 8 8 8 1 2 4 8
armv4l 1 2 4 4 4 8 1 2 4 8
ia64 1 2 4 8 8 8 1 2 4 8
m68k 1 2 4 4 4 8 1 2 4 8
米普 1 2 4 4 4 8 1 2 4 8
1 2 4 4 4 8 1 2 4 8
火花 1 2 4 4 4 8 1 2 4 8
sparc64 1 2 4 4 4 8 1 2 4 8
x86_64 1 2 4 8 8 8 1 2 4 8
还有一些例外。例如:
有趣的是,SPARC 64 体系结构在 32 位用户空间中运行,因此指针在那里是 32 位宽,即使它们在内核空间中是 64 位宽。这可以通过加载 kdatasize 模块(在示例文件的 misc-modules 目录中可用)来验证。该模块在加载时使用 printk 报告大小信息并返回错误(因此无需卸载它):
@user1437033 我猜 Windows 与 gcc 标准不兼容。所以你可能会从 Windows 的程序员那里得到答案。@Paul R 我们应该将其视为常规代码,对吗?如果你使用交叉编译工具,比如arm(它只有32位),那么你也无法得到答案。
Ps:我不支持你使用Dev c++编译器,很多场景很奇怪,不标准。代码块或vs 2010可能是一个不错的选择。我希望这可以帮助你。