【问题标题】:What is the significance of caddr_t and when is it used?caddr_t 的意义是什么,什么时候使用?
【发布时间】:2011-09-16 21:56:30
【问题描述】:

谁能告诉我:

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

提前致谢。

【问题讨论】:

  • “保存演员表”? :) 至少在 Linux x64 上它最终是 char*(在第一次通过 __kernel_caddr_t 之后)。在这方面,它作为一种不透明类型
  • 你说的不清楚 :-( 什么是“节省演员表”????? 为什么不直接使用 char*。我不认为是这样。主要是我有看到这个用于内存分配相关的东西。尤其是使用 mmap。

标签: c linux memory-management


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 您说:“caddr_t 是一种遗留的 BSD 类型,与一些低级调用(如 mmap)相关联”,当同时 void* 也存在时,您已经忽略了它的关联原因。
    • 它可能是在void * 存在之前创建的,尽管我没有该声明的参考。无论如何,现在都无关紧要了。它不是任何现代标准的一部分,不应在新代码中使用,而应在旧代码中修复。
    • 感谢您的回答。我理解你的意思,但你能否发布一个链接/参考,上面写着:“caddr_t 已过时,必须使用 void*”?
    • 只看POSIX,它在任何地方都没有提到caddr_t。特别是mmap:pubs.opengroup.org/onlinepubs/9699919799/functions/mmap.html 的文档具有正确的原型void *。如果您愿意,您可以在标准的其余部分搜索caddr_t,但您不会找到它,因为它不存在。
    • Linux 内核对于合理使用类型不是一个很好的参考... :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 2011-01-26
    • 2013-10-07
    • 1970-01-01
    • 2011-07-15
    相关资源
    最近更新 更多