我正在编写一种编程语言,当我遇到this question时,我的直接想法是,语言应该将布尔语言优化为程序员的位标志。这将保留速度和有效使用内存的所有好处,同时消除维护的负担和由更复杂的位操作造成错误的可能性。
如果存在只存储一组布尔值的情况,则可能不希望进行此优化。基本上,如果您有8 bits for flags + 8 bit masks * 8 bits per bit mask = 72 bits
而不是8 booleans * 8 bits per boolean = 64 bits
。但是,只要你有两个副本的布尔,它就变成了2 copies * 8 bits for flags + 8 bit masks * 8 bits per bit mask = 80 bits
和2 copies * 8 booleans * 8 bits per boolean = 128 bits
。这似乎是几个情况下,布尔人将是更多的存储-最优将很容易被发现,所以我们不能应用优化。
语言不支持这种优化有什么原因吗?我环顾四周,似乎没有任何一种语言会这样做(我可能只是找不到合适的地方)。
发布于 2009-09-10 21:03:35
我见过人们用汇编语言来做这些事情,他们把布尔人打包成文字来节省空间,然后编写大量的指令来获取/设置比特。
显然,在速度和内存方面,在打包布尔包和不打包它们之间是一种权衡,我个人不愿让编译器为我决定这一点。
发布于 2010-01-07 03:07:17
C真的..。
#include <stdio.h>
typedef struct foo_s {
unsigned char field1 :1;
unsigned char field2 :1;
unsigned char field3 :4;
unsigned char field4 :2;
} foo_t;
int main() {
printf("%d\n", sizeof(foo_t));
return 0;
}
运行时,这四个字段被打包为一个字节:
$ gcc -Wall -o bittest bittest.c
$ ./bittest
1
https://stackoverflow.com/questions/1407209
复制相似问题