我试图尽可能多地挤出我的内存。
我有一个 4.9999995e13 整数矩阵,但它们只需要为真或为假——基本上我只需要为这些整数中的每一个存储一点。

我知道 C 中没有单个位类型(也许有人可以向我解释原因),而且我也知道如果 short short int 存在,它将是 1 个字节,与 char 相同。然而,C 中的所有逻辑操作都返回整数(以及一些其他函数)。

所以我的问题是:

  • 有没有办法让 short short int 存在?
  • 如果我改用 char,是否会因为所有必须完成的 int 转换而导致性能下降?
  • 还有另一种我失踪的方式吗?

  • 以防万一,我正在为 C99 使用 GCC 进行编译。

    编辑我刚刚在 this wikipedia page 上看到有一个 _Bool 类型,这实际上是标准的吗?

    最佳答案

    __Bool 类型在最新版本的 C 中是标准的,但这仍然不是您想要的,因为 __Bool 仍然至少占用一个字节(根据定义, char 也是如此)。

    不,如果您想要那么多 boolean 位,您需要将它们打包成 bitfieldbit array 。 C 中的位域没有标准数据类型,因此您还必须编写自己的宏或函数来获取特定偏移量的位。我还希望您将在具有大量 RAM 的 64 位机器上运行它,否则您将很快耗尽内存。

    10-07 19:05
    查看更多