8

可能重复:
size_t 与 intptr_t

我的一些代码处理指针并uintptr_t作为输入,因为它必须使用指针。

我现在必须对整数做同样的事情,所以我想重用该代码。

size_t一样的uintptr_t吗?uintptr_t我可以通过替换来更改实现并对指针和整数使用相同的代码size_t吗?

4

3 回答 3

18

size_t必须足够大以包含最大可能对象的大小。 uintptr_t必须足够大以包含 任何指针。鉴于此,或多或少可以保证 sizeof(uintptr_t) >= sizeof(size_t)(因为最大可能对象中的所有字节都必须是可寻址的),但不能保证更多。在具有线性寻址的机器上,它们的大小可能相同。另一方面,在分段架构中,通常uintptr_t大于size_t,因为对象必须位于单个段中,但指针必须能够寻址所有内存。

于 2012-12-28T10:35:36.893 回答
2

它取决于实现(包括处理器、ABI、编译器、标准库)。您无法保证与 ;size_t相同uintptr_t。但这可能会发生(在 32 位 Linux x86 或 ARM 上,两者都是 32 位无符号整数)。

的目的size_t是成为一个大小(特别是分配的内存块),而 的目的uintptr_t是成为与指针相同位大小的无符号整数。

于 2012-12-28T09:16:15.023 回答
-1

不同的编译器有不同的结果。如果您希望它们相同,则必须确保您的编译器设置为 32 位 Linux x86 或 ARM,然后它就会正确。

于 2012-12-28T09:47:49.907 回答