代码之家  ›  专栏  ›  技术社区  ›  Imagist

语言功能:将布尔优化为标志+位掩码

  •  1
  • Imagist  · 技术社区  · 16 年前

    我正在写一种编程语言,当我遇到 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 回复  |  直到 9 年前
        1
  •  0
  •   Mike Dunlavey    16 年前

    我见过人们在汇编语言中这样做,他们将布尔值打包成单词以节省空间,然后编写大量指令来获取/设置位。

        2
  •  0
  •   NickZoic    16 年前

    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