【问题标题】:Fixed 64 bit integer in Linux Kernel修复了 Linux 内核中的 64 位整数
【发布时间】:2020-03-31 06:47:07
【问题描述】:

我想在 linux 内核中有一个固定大小的 64 位整数。

我的问题:

  1. 如果我使用unsigned long,那么它在一种架构上可能是 64 位,而在另一种架构上可能是 32 位。对?
  2. 固定的数据类型是什么 64 位整数?

我特指linux内核

【问题讨论】:

    标签: c linux gcc linux-kernel


    【解决方案1】:

    如果我使用 unsigned long,那么它在一种架构上可能是 64 位,而在另一种架构上可能是 32 位。对?

    是的,unsigned long 的大小是实现定义的,因此不可移植。

    固定 64 位整数的数据类型是什么?

    int64_tuint64_t

    【讨论】:

    • 在 Linux 内核中而不是 u64s64 或它们的 ABI 类似物 __u64__s64
    【解决方案2】:

    C 语言提供了很多固定宽度的类型,有符号的和无符号的。

    正如 Lundin 所说,“unsigned long 的大小是实现定义的,因此不可移植”。

    因此,intunsigned intfloat 等常见类型取决于您的编译器。

    您可以查看自 C99 以来可用的固定宽度整数类型的完整列表in this reference

    int64_t 根据文档,“signed 整数类型,宽度正好为 64 位,没有填充位,负值使用 2 的补码”。

    uint64_t,同样根据文档,“unsigned 整数类型,宽度正好为 64 位”

    但还有更多其他固定的 64 位宽度整数类型,您可能会好奇,例如:uint_fast64_tuint_least64_t

    我推荐你看看reference,并在学习神奇的 C 类型时获得很多乐趣\o/

    您也可以在GNU libc manual of integer types上查看可用类型

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2015-05-19
      • 2017-05-30
      • 1970-01-01
      • 2011-07-10
      • 2010-09-07
      • 1970-01-01
      • 1970-01-01
      • 2012-08-01
      • 1970-01-01
      相关资源
      最近更新 更多