1

프로그래밍 언어를 쓰고 있는데 this question을 만나면 즉시 언어가 프로그래머를 위해 부울을 비트 플래그로 최적화해야한다는 생각이 들었습니다. 이렇게하면 유지 보수의 부담과 복잡한 비트 조작으로 인한 오류 가능성을 제거하면서 속도와 효율적인 메모리 사용의 모든 이점을 유지할 수 있습니다.언어 기능 : 플래그 + 비트 마스크에 대한 부울 최적화

이 최적화가 필요하지 않은 경우는 저장된 부울 집합이 하나 뿐인 경우입니다. 기본적으로 8 booleans * 8 bits per boolean = 64 bits 대신 8 bits for flags + 8 bit masks * 8 bits per bit mask = 72 bits이있는 경우 그러나 불법 복제본이 두 장이라도 있으면 2 copies * 8 bits for flags + 8 bit masks * 8 bits per bit mask = 80 bits2 copies * 8 booleans * 8 bits per boolean = 128 bits이됩니다. boolean 값이 더 많은 스토리지 최적이 될 수있는 몇 가지 경우처럼 쉽게 감지 할 수 있으므로 이 아닌 최적화를 적용 할 수 있습니다.

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

답변

0

저는 사람들이 공간을 절약하기 위해 부울을 단어로 채운 다음 어셈블리 비트를 가져 오거나 설정하기위한 많은 지침을 작성하는 어셈블리 언어로이 작업을 수행하는 것을 보았습니다.

확실하게 포장 불량배와 포장 금지 사이에는 속도와 기억이 균형을 이루지 않으며 개인적으로 나는 나를 위해 그것을 결정하려는 컴파일러를 부끄럽게 생각합니다. C가하는

+0

컴파일러는 당신을 위해 훨씬 더 큰 의사 결정의 모든 시간을, 그리고 그들은 옳다. 나는 왜 이런 특별한 최적화가 결코 만들어지지 않았는지 궁금해하고있다. 심지어 C#과 Java에서도 그렇다. – Imagist

+0

@imagist : 어쩌면 저는 "대다수의 하나"라고 생각하지만, 컴파일러의 공격적인 최적화에 대해서는 감사하지 않습니다. 거의 항상 잘못되어 있습니다. 정말 진지한 최적화가 내 직업입니다. 컴파일러에서 "좋은 코드"를 생성하지만 실제 생각은 그대로 남겨두기를 원합니다. –

+0

@mike 그 생각의 문제는 요즘 컴파일러를 최적화하는 것이 인간이 할 수있는 것보다 빠르고 정확하고 효과적이라는 것입니다. – Imagist

0

... 실행이 그 네 개의 필드는 한 바이트로 챙겨

#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; 
} 

: 같은 C# 및 Java와 같은

$ gcc -Wall -o bittest bittest.c 
$ ./bittest 
1 
관련 문제