1

您将如何了解操作系统的一些细节?提前致谢。

4

4 回答 4

1

在 linux 中,这样一个通用问题的答案就是使用

uname -m

甚至:

getconf LONG_BIT

在 C 中,您可以使用 uname(2) 系统调用。

在 Windows 中,您可以使用:

systeminfo | find /I "System type"

甚至检查环境:

set | find "ProgramFiles(x86)"

(或在 C 中使用 getenv() )

于 2012-06-08T18:52:59.010 回答
0

原始问题:

如何用 C 或其他方式知道操作系统的位?

正确的方法是使用一些系统 API 或命令来获取架构。在 C 中比较sizeof不会给您系统指针大小,而是目标体系结构的指针大小。这是因为大多数架构/操作系统都是向后兼容的,因此它们可以毫无问题地运行以前的 16 位或 32 位程序。即使在 64 位操作系统上,32 位程序的指针仍然是 32 位长。甚至在 64 位架构上,一些操作系统可能仍然使用 32 位指针,例如x32-abi

于 2013-09-11T04:47:34.730 回答
-1

如果你使用 c,你可以获得 sizeof(void*) 或 sizeof(long) .if =8 then 64bits else 32bits.It's the same to all arch.

于 2012-06-06T08:50:30.910 回答
-1

我很抱歉我的粗心和错误。它仅适用于 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可能是一个不错的选择。我希望这可以帮助你。

于 2012-06-07T17:44:33.557 回答