문제

나는 프로그래밍 언어를 쓰고 있고 내가 만났을 때 이 질문, 나의 즉각적인 생각은 언어가 Booleans를 프로그래머의 비트 깃발로 최적화해야한다는 것입니다. 이는 유지 보수 부담과 더 복잡한 비트 조작으로 인한 오류 가능성을 제거하면서 속도와 효율적인 메모리 사용의 모든 이점을 유지합니다.

이 최적화를 원하지 않을 수있는 한 가지 사례는 부울 한 세트가 저장되는 상황이있는 경우입니다. 기본적으로, 당신이 있다면 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. 부울이 더 스토리지 최적이 될 수있는 몇 가지 사례가 감지하기 쉬운 것처럼 보입니다. ~ 아니다 최적화를 적용하십시오.

언어 가이 최적화를 지원하지 않는 이유가 있습니까? 나는 주위를 둘러 보았고 어떤 언어도하지 않는 것 같지 않습니다 (올바른 장소를보고 있지 않을 수도 있습니다).

도움이 되었습니까?

해결책

나는 사람들이 어셈블리 언어로 이것을하는 것을 보았습니다. 여기서 부울은 공간을 절약하기 위해 단어로 포장 한 다음 비트를 얻거나 설정하기위한 많은 지침을 작성했습니다.

분명히 부울을 포장하고 포장하지 않는 속도와 메모리에는 분명히 트레이드 오프가 있으며, 개인적으로 나는 컴파일러가 나를 위해 그것을 결정하려고 노력하고 있습니다.

다른 팁

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 개의 필드는 하나의 바이트로 포장됩니다.

$ gcc -Wall -o bittest bittest.c 
$ ./bittest 
1
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top