【问题标题】:Are uintptr_t and size_t same? [duplicate]uintptr_t 和 size_t 相同吗? [复制]
【发布时间】:2012-12-13 13:54:48
【问题描述】:

可能重复:
size_t vs. intptr_t

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

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

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

【问题讨论】:

    标签: c++ types casting std


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        不同的编译器有不同的结果。如果你想让它们一样,你必须确保你的编译器设置为 32 位 Linux x86 或 ARM,然后它就会正确。

        【讨论】:

          猜你喜欢
          • 2015-10-10
          • 2021-02-20
          • 1970-01-01
          • 2021-12-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-17
          相关资源
          最近更新 更多