【问题标题】:How to determine the wordsize in Linux kernel programming?Linux内核编程中如何确定字长?
【发布时间】:2015-01-10 16:39:43
【问题描述】:

在用户空间代码中,使用了宏__WORDSIZE,包含在<bits/wordsize.h> 中。但是,当我进行 Linux 内核编程时,__WORDSIZE 似乎不可用。

如果包含<bits/wordsize.h>,它会收到一个编译错误,说:

error: bits/wordsize.h: No such file or directory

但如果不包含<bits/wordsize.h>,它会收到另一个编译错误,说:

error: ‘__WORDSIZE’ undeclared.

内核编程似乎不支持<bits/wordsize.h> 头文件。 Linux内核编程中的wordsize应该怎么确定?

附:我的编译器版本是gcc (GCC) 4.4.6

【问题讨论】:

  • 解决此类问题的策略可能是考虑为什么您需要知道。然后想想现有的内核功能具有相同的需求,然后去看看它是如何实现的。
  • 因为我想在 x86 和 x64 上编写不同的代码目标,而#if __WORDSIZE == 32 是一个很好的方法。
  • 如果目标都不是呢?
  • 我不在乎,我公司的所有产品针对 x86 和 x64。
  • 那么你应该匹配那些架构,而不是他们与其他人共享的属性。

标签: linux linux-kernel kernel kernel-module computer-architecture


【解决方案1】:

Linux 下每个支持的体系结构都定义了 BITS_PER_LONG 为 C long 类型的长度,即系统 字长。

来自http://www.makelinux.net/books/lkd2/ch19lev1sec2

【讨论】:

    【解决方案2】:

    任何架构中的字大小都相当于长数据类型的大小。 所以使用 #define __WORDSIZE sizeof(long)

    你也可以使用指针的大小。

    【讨论】:

      猜你喜欢
      • 2015-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 2012-09-27
      相关资源
      最近更新 更多