Особенности языка: оптимизация логических значений до флагов + битовых масок - PullRequest
1 голос
/ 10 сентября 2009

Я пишу язык программирования, и когда я натолкнулся на этот вопрос , я сразу подумал, что языки должны оптимизировать логические значения в битовые флаги для программиста. Это позволило бы сохранить все преимущества скорости и эффективного использования памяти, одновременно снимая бремя обслуживания и возможности ошибок, вызванных более сложными манипуляциями с битами.

Единственный случай, когда вам может не понадобиться такая оптимизация, - это ситуация, когда хранится только один набор логических значений. В основном, если у вас есть 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 голосов
/ 07 января 2010

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
0 голосов
/ 11 сентября 2009

Я видел, как люди делают это на ассемблере, где они упаковывают логические значения в слова для экономии места, а затем пишут множество инструкций для получения / установки битов.

Очевидно, что существует компромисс между скоростью и памятью между упаковкой логических значений и неупаковкой их, и лично я стесняюсь компилятора, пытающегося решить это для меня.

...