gpt4 book ai didi

c - 为什么linux源码里有那么多typedef?

转载 作者:太空狗 更新时间:2023-10-29 11:49:28 24 4
gpt4 key购买 nike

来自 Linux 源代码的 types.h 文件的示例

typedef __kernel_timer_t    timer_t;
typedef __kernel_key_t key_t;
typedef __kernel_timer_t timer_t;

它们都是typedef of int(数据类型)。 Linux 包含如此多的 typedef 简单数据类型,如 longint 等。他们这样做有什么具体原因吗?

最佳答案

想到几个因素:

  • linux 支持许多不同的平台和架构,允许某些数据类型在这些不同的环境中 float 到不同的大小可能是有意义的——例如,为了提高效率。然后,typedef 允许基本类型在不同的架构上有所不同——通常是通过包含特定于平台的 header 。

  • 另一方面,对于某些关键数据类型,它们实际上具有指定的长度可能是必要的(对于持久/共享数据结构或只是为了保证值的范围)但实际上可能 要求 在不同的体系结构上用不同的基本类型声明它们。 (请注意,除了少数异常(exception),C 语言标准不保证各种数字类型的特定长度。)

  • 为了构建系统调用绑定(bind),必须能够将许多内核数据类型规范导出到 glibc(或其他 libc 实现),以便用户空间值可以可靠地传递到系统调用中。

  • 内核中称为 key_t(例如)的类型可能已用于用户空间代码中的某些其他数据类型。因此,使用 __kernel_key_t 允许类型是不同的,即使在使用另一个 key_t 概念的代码中可能需要它而没有任何歧义。

额外的 typedef 层允许处理所有这些问题,同时不会因为让内核开发人员一直键入 __kernel_XXX_t 而给他们带来过度负担。

关于c - 为什么linux源码里有那么多typedef?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45940390/

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