语言功能:优化布尔值到标志+位掩码

时间:2009-09-10 19:22:47

标签: optimization memory programming-languages boolean bit-manipulation

我正在编写一种编程语言,当我遇到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。看起来布线最优化的少数情况很容易被发现,因此人们可以应用优化。

语言是否有任何理由不支持此优化?我环顾四周,似乎没有任何语言(我可能不会在正确的地方寻找)。

2 个答案:

答案 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