caddr_t的意义是什么,什么时候使用?

问题描述 投票:0回答:3

有人可以告诉我吗:

  1. 什么是
    caddr_t
  2. 什么时候使用?
  3. 它与
    void*
    有何不同?
  4. 何时使用
    void*
    何时使用
    caddr_t
    ?

提前致谢。

c linux memory-management
3个回答
27
投票

caddr_t
是一种遗留的 BSD 类型,与一些低级调用(如
mmap
)相关联,并且永远不应该在现代代码中使用它。它被 POSIX 标准拒绝。标准化
mmap
使用
void *


3
投票

caddr_t
用作指向核心地址的指针。当我需要从用户空间访问内核结构时,我在 SVR4 中使用了它(已使用 mmap 访问
/dev/kmem
)。即使存在“
/proc
”,ps 命令仍然使用内核的 mmap 来开始遍历进程表。正如每个人所说,它已被 void * 取代。


0
投票

13 年后,这是我的 2 美分价值:caddr_t 是 char* 的别名 (typedef)。它与 void* 不同,因为您可以使用 caddr_t 进行有限的算术运算,但不能使用 void* 进行算术运算。对于代码读者来说,它与 char* 的含义也并不完全相同,因为 char* 是指向特定类型变量 (char) 的指针,而 caddr_t 只是指向未知或变量类型的某个内存位置的指针。对我来说,char*、caddr_t 和 void* 都可以以不同但重叠的方式发挥作用(重叠,因为它们包含相同的位)。因此,基本上,当您希望类型包含指向内存的通用指针(可以与相同类型的其他变量进行比较)并用于简单的指针相关算术时,将使用 caddr_t,而不暗示正在使用任何特定类型的对象。指向。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.