言語機能:ブール値をフラグ+ビットマスクに最適化
-
05-07-2019 - |
質問
プログラミング言語を書いていますが、この質問、私の目下の考えは、言語はプログラマのためにブール値をビットフラグに最適化すべきだというものでした。これにより、メンテナンスの負担と、より複雑なビット操作によるエラーの可能性を排除しながら、速度と効率的なメモリ使用のすべての利点が維持されます。
この最適化を行わない場合の1つのケースは、格納されているブール値のセットが1つしかない状況がある場合です。基本的に、 8ブール値* 8ビットブール値= 64ビット
ではなく、 8ビットフラグ+ 8ビットマスク* 8ビット/ビットマスク= 72ビット
がある場合。しかし、ブール値のコピーが2つでもあるとすぐに、 2コピー*フラグ用8ビット+ 8ビットマスク*ビットマスクあたり8ビット= 80ビット
対 2コピー* 8ブール値*ブール値あたり8ビット= 128ビット
。ブール値がよりストレージ最適であるいくつかのケースは、簡単に検出できるので、最適化を適用しない ことができるようです。
言語がこの最適化をサポートしない理由はありますか?私は周りを見回したが、どの言語もそうではないようだ(正しい場所を探しているだけではないかもしれない)。
解決
これをアセンブリ言語で実行し、スペースを節約するためにブール値を単語にパックしてから、ビットを取得/設定するための多くの命令を記述しました。
明らかに、ブール値をパックすることとパックしないことの間には速度とメモリのトレードオフがあります。
他のヒント
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;
}
実行すると、これらの4つのフィールドは1バイトにパックされます:
$ gcc -Wall -o bittest bittest.c
$ ./bittest
1
所属していません StackOverflow