我试图尽可能多地挤出我的内存。
我有一个 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 位,您需要将它们打包成 bitfield 或 bit array 。 C 中的位域没有标准数据类型,因此您还必须编写自己的宏或函数来获取特定偏移量的位。我还希望您将在具有大量 RAM 的 64 位机器上运行它,否则您将很快耗尽内存。