内核的数据类型

本文探讨了Linux内核代码的可移植性,强调了使用正确数据类型的重要性。内核数据类型分为标准C类型、确定大小的类型和接口特定类型。建议避免使用固定大小的C类型,而是采用如u32、pid_t等类型,以确保代码在不同体系结构上的兼容性。同时,文章提醒开发者注意时间间隔、页大小、字节序、数据对齐、错误处理和链表操作等方面的移植性问题。
摘要由CSDN通过智能技术生成

在讨论更高级的话题前,我们需要讨论一下可移植问题。现代版本的Linux内核的可移植性是非常好的,可以运行在许多不同的体系架构上。由于Linux的多平台特性,任何一个重要的驱动程序都应该是可移植的。

与内核代码相关的核心问题是这些代码应该能够同时访问已知长度的数据项,并充分利用不同的处理器的能力。

坚持使用严格的数据类型,并且使用-Wall -Wstrict-prototypes选项编译可以防止大多数的代码缺陷。

内核使用的数据类型主要被分成三大类:类似int这样的标准C语言类型,类似u32这样的有确定大小的类型,以及像pid_t这样的用于特定内核对象的类型。我们将讨论应该在什么情况下使用这三种典型类型,以及如何使用。

使用标准C语言类型

尽管大多数程序员习惯于自由使用像int和long这样的标准类型,但编写驱动程序时应该格外小心,以避免类型冲突和代码缺陷。

问题是,当我们需要“两个字节的填充符”或者“用四个字节字符串表示的某个东西”时,我们不能使用标准类型,因为在不同的体系上,普通C语言的数据类型所占空间的大小并不相同。下面是在不同平台上类型所占空间大小:

尽管在混合使用不同数据类型时我们必须小心谨慎,但有时有理由这样做。这样的一种情况是内存地址,使用无符号整数类型可以更好地实现内存管理;内核把物理内存看作是一个巨型数组,一个内存地址就是该数组的一个索引。此外,我们可以很方便地对指针取值;但在直接处理内存地址时,我们乎从来不会以这种方式对它们取值。使用一个整数类型可以防止这种取值,因而可避免代码缺陷。所以内核中的普通内存地址通常是unsigned long,这利用了如下事实:至少在当前Linux支持的所有平台上,指针和long整型的大小总是相同的。

为数据项分配确定的空间大小

<
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值