Gri*_*fin 4 c int boolean short char
我试图尽可能地挤出我的记忆.我有一个4.9999995e13整数矩阵,但它们只需要是真或假 - 基本上我只需要为这些整数中的每一个存储一位.
我知道C中没有单一的位类型(也许有人可以解释为什么,对我来说),而且我也知道如果short short int存在它将是1字节,与char相同.但是,C中的所有逻辑运算都返回整数(以及一些其他函数).
所以我的问题是:
short short int存在?char,那么我是否会因为所有int必须完成的铸造而降低性能?只是在案件中它是相关的,我正在与GCC编译C99.
编辑我刚刚在这个维基百科页面上看到有一种_Bool类型,这实际上是标准的吗?
你想要的是一个位图(或维基百科称之为位数组).
并且没有这样的东西short short int,这只是charC中最小的整数存储类.
使用这种方法时可能会有一些性能开销,但不是因为对int的隐式转换,而是因为操作位图比直接操作数组成员更棘手.
一个小例子可能有助于说明:
使用普通整数矩阵:
int mat[8*8]; // assuming row major order
int is_element_set(int x, int y) {
return mat[y*8 + x];
}
使用位图:
unsigned char mat[8]; // assuming CHAR_BIT == 8
int is_element_set(int x, int y) {
return mat[y] & (1 << x);
}
Run Code Online (Sandbox Code Playgroud)
您有大约 50 TB 的数据。您想一次将它们全部放入 RAM 中吗?使用多于一位的 RAM 来保存一位信息将是完全疯狂的,即使这样,您的计算机也必须与这个星球上最大的超级计算机的大小差不多。忘记位打包的性能。你将不得不担心完全不同的事情。