나는 사용하고 int
값을 저장하는 유형입니다. 프로그램의 의미에 따라 값은 항상 매우 작은 범위 (0-36)로 변하며 int
(a char
아님)는 CPU 효율성 때문에 사용됩니다.
이러한 작은 범위의 정수에서 많은 특수 산술 최적화가 수행되는 것처럼 보입니다. 이러한 정수에 대한 많은 함수 호출은 작은 "마법"연산 세트로 최적화 될 수 있으며 일부 함수는 테이블 조회로 최적화 될 수도 있습니다.
따라서 컴파일러에게 이것이 int
항상 작은 범위에 있고 컴파일러가 최적화를 수행 할 수 있다고 말할 수 있습니까?
unsigned
컴파일러가 추론하기가 더 쉬운 유형 을 사용하면 약간의 이득을 얻을 수 있습니다 .
int
및 unsigned int
필요 기호 - 또는 64 비트 포인터로 대부분의 시스템에서, 너무, 64 비트 32에서 제로 - 확장 될 수 있습니다. x86-64 에서 32 비트 레지스터의 연산은 무료로 64 비트로 0으로 확장됩니다 (부호 확장은 아니지만 부호있는 오버플로는 정의되지 않은 동작이므로 컴파일러는 원하는 경우 64 비트 부호있는 수학을 사용할 수 있음). 따라서 계산 결과가 아닌 32 비트 함수 인수를 제로 확장하는 추가 명령 만 볼 수 있습니다. 더 좁은 부호없는 유형에 적합합니다.