문제

때마다 BOOL 데이터 형식으로 미리 정의된 사 boolean 다음과 같은 정의

typedef unsigned char BOOL;

(으로 인하여 메모리 사용).

나는 그것을 실현할 수 있는 더 나은 사용하는 기본 버스 폭이 성능에 대한 이유입니다.예를 들어,32 비트 프로세서 수

typedef unsigned int BOOL;

이제 무슨 일이 일어날 것에 대한 64 비트 프로세서,내가 여전히 정의하고자 하는 BOOL 에 대한 기본 버스 폭입니다.

도움이 되었습니까?

해결책

최소 x86 및 팔 로드할 수 있고 저장하는 바이트에서 32 비트를 등록하지 않고 어떤 벌금,그래서 정말 없다는 성능에 미치는 영향에 대한 사용 char.나는 완전히 확실하지 않다,하지만 나는 내기 x86-64 같은 지침을 너무입니다.(물론 x86 및 x86-64 처리할 수 있는 8 비트 값에 직접 등록이 됩니다.).

그래서만 관심을 가지도 메모리 레이아웃이 있습니다.물론 컴파일러 정렬,그래서 대부분의 시간,char 값에서는 구조체를 얻을 덧대지 않는 한 그들은 바로 서로 옆에,당신은 수도 있습니다 실제로 저장을 몇 바이트 공간과를 얻을 약간 더 나은 캐시 성능이다.이 있는 경우 거대한 배열의 BOOLs 및 메모리는 우려해야 합 bit 팩 어쨌든 그들을.

어떤 경우에,그것은 아닌 문제입니다.당신은 왜 시도하지 않는 실행하는 프로그램 컴파일된 두 가지고 있는 경우에,어떤 중요한 성능에 영향을 미치거나 메모리를 사용합니다.당신이 찾을 수 있다는 자신을 구입할 수 있습 맥주와 그것입니다.

다른 팁

나는 기본 버스 너비에 대해 걱정하지 않을 것입니다. 효율적인 너비 (그게 당신의 목표 였어요)? 거의 모든 컴퓨터에서는 괜찮은 C 컴파일러가 컴파일됩니다. unsigned int 합리적으로 효율적인 너비로, 당신은 가기에 좋습니다.

공연에 대해 결코 추측하지 말고 측정하다. 측정, 더 나은 것에 대한 확실한 답변을 제공 할 것입니다. 그리고 이것이 각 새로운 컴파일러 버전 인 시스템 업그레이드에서 변경 될 수 있다는 것을 기억하십시오 ...

또한 언젠가 부울 배열이 필요할 수 있으며,이 경우 Bool Can에 프로세서 단어를 사용합니다. ~ 아니다 최상의 솔루션이 되십시오.

Bool 유형을 사용하지 않겠습니까? stdbool.h?

사전 처리기를 사용하는 것이 좋습니다.

 #ifndef BOOL 
   #ifdef ILP32
     #define BOOL uint32_t
   #endif
   #ifdef LP64
     #define BOOL uint64_t
   #endif
 #endif

대부분의 플랫폼에 최적입니다

typedef enum {false = 0, true = 1,} bool;

글쎄, 당신은 항상 typedef를 정의 할 수 있습니다 long long 또는 무언가이지만 실제로 이것이 사람들이 어떤 이유로하는 일이라고 확신하지 못합니다. (아마도 크기 (int*) 또는 그와 비슷한 것을 기준으로 조건부 정의를 할 수도 있습니다).

문자를 사용하는 것은 정수를 사용하는 것보다 느리게 될 수 있습니다.

int_fast8_t stdint.h는 좋은 선택이어야합니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top