我正在编写一种编程语言,当我遇到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
。看起来布线最优化的少数情况很容易被发现,因此人们可以不应用优化。
语言是否有任何理由不支持此优化?我环顾四周,似乎没有任何语言(我可能不会在正确的地方寻找)。
答案 0 :(得分:0)
我见过人们用汇编语言来做这件事,他们把布尔语打包成单词以节省空间,然后写出大量指令来获取/设置位。
显然,在打包布尔值之间存在速度和内存之间的权衡,而不是打包它们,而且我个人对于想要为我做出决定的编译器感到害羞。
答案 1 :(得分:0)
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