4

它似乎工作正常,但我认为最多可以存储在内存中的是 32 位整数?

现在我很困惑它有什么不同。

谢谢!

4

2 回答 2

10

我认为其他答案并没有完全正确地解释这一点。

uint64_t 和 int64_t 是C 语言数据类型,而不是硬件数据类型。编译器会尽一切努力使这些类型作为 64 位无符号或有符号整数工作。如果硬件提供 64 位寄存器和整数运算,那就很好——编译器将直接使用这些。如果硬件只有 32 位寄存器(或 16 位或 8 位),则编译器和运行时系统使用软件仿真来完成工作。

于 2013-02-28T17:05:59.337 回答
6

不同之处不在于您可以使用 64 位数据类型。不同之处在于可用内存地址空间的大小,以及所需的内存指针大小。在 32 位操作系统中,您有 2^32 字节的可寻址内存空间,并且您需要 32 位指针来覆盖所有内容。在 64 位操作系统中,您有 2^64 字节的内存空间来寻址,因此指针必须是 64 位的。

在硬件级别,固有的 64 位数据类型在 64 位硬件上可能更优化,因为将有 64 位寄存器和指令来处理它们。否则编译器/运行时库将做更多的工作来支持/模拟 32 位硬件上的 64 位操作。

于 2013-02-28T16:40:54.717 回答