gpt4 book ai didi

c - 什么时候 uintptr_t 优于 intptr_t?

转载 作者:太空狗 更新时间:2023-10-29 16:30:51 26 4
gpt4 key购买 nike

考虑到我需要将“通用”指针的值存储在结构中并且对指向的内存本身不感兴趣,我发现将其存储为 intptr_t< 在语义上更正确 而不是 void*。问题是 uintptr_t 是否更适合,以及通常什么时候一个比另一个更受欢迎?

最佳答案

它主要是风格论点(优化编译器可能会生成相同或非常相似的代码)。然而,指针比较可能是一个棘手的问题。

请记住,在纯标准 C 中,指针比较仅对指向相同聚合数据的指针大致有意义。您可能不允许比较来自 malloc 的两个结果,例如保留一个排序的指针数组。

我会将它们保留为 void* , 或者作为 uintptr_t .签名intptr_t分隔负数和正数很不方便,而且它们来自重要的应用程序指针,这可能不受欢迎。

注意 void*不能取消引用:作为 uintptr_t ,您必须将其转换为对地址指向的数据做一些有用的事情;然而void*指针可以传递给例程,如 memset

附言。我假设一个普通处理器(例如一些 x86、PowerPC、ARM 等)具有平坦的虚拟地址空间。你会发现奇异的处理器——也许是一些 DSP——具有非常显着的差异(也许 intptr_t 并不总是有意义;记住在 1990 年代 Cray Y-MP super 计算机 sizeof(long*) != sizeof(char*) ;当时 C99 不存在,而且我不确定它的 <stdint.h> 在此类机器上是否有意义)

关于c - 什么时候 uintptr_t 优于 intptr_t?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29800256/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com