uintptr_t和size_t是否相同?

时间:2012-12-28 09:13:06

标签: c++ types casting std

  

可能重复:
  size_t vs. intptr_t

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

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

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

3 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:-1)

不同的编译器有不同的结果。如果你想要它们具有相同的效果,你必须确保你的编译器应该在32位Linux x86或ARM上,这是正确的。