有人可以告诉我吗:
caddr_t
?void*
有何不同?void*
何时使用 caddr_t
?提前致谢。
caddr_t
是一种遗留的 BSD 类型,与一些低级调用(如 mmap
)相关联,并且永远不应该在现代代码中使用它。它被 POSIX 标准拒绝。标准化 mmap
使用 void *
。
caddr_t
用作指向核心地址的指针。当我需要从用户空间访问内核结构时,我在 SVR4 中使用了它(已使用 mmap 访问/dev/kmem
)。即使存在“/proc
”,ps 命令仍然使用内核的 mmap 来开始遍历进程表。正如每个人所说,它已被 void * 取代。
13 年后,这是我的 2 美分价值:caddr_t 是 char* 的别名 (typedef)。它与 void* 不同,因为您可以使用 caddr_t 进行有限的算术运算,但不能使用 void* 进行算术运算。对于代码读者来说,它与 char* 的含义也并不完全相同,因为 char* 是指向特定类型变量 (char) 的指针,而 caddr_t 只是指向未知或变量类型的某个内存位置的指针。对我来说,char*、caddr_t 和 void* 都可以以不同但重叠的方式发挥作用(重叠,因为它们包含相同的位)。因此,基本上,当您希望类型包含指向内存的通用指针(可以与相同类型的其他变量进行比较)并用于简单的指针相关算术时,将使用 caddr_t,而不暗示正在使用任何特定类型的对象。指向。