카테고리 보관물: C++

C++

uint_fast32_t는 무엇이며 일반 int 및 uint32_t 대신 사용해야하는 이유는 무엇입니까? 의 이유는 저수준 표현을

따라서 typedef: ed 원시 데이터 유형 의 이유는 저수준 표현을 추상화하고 이해하기 쉽게 만드는 것 uint64_t입니다 ( long long유형 대신 8 바이트).

그러나가 uint_fast32_t동일한 갖는 typedef등을 uint32_t. “빠른”버전을 사용하면 프로그램이 더 빨라 집니까?



답변

  • int일부 플랫폼에서는 16 비트만큼 작을 수 있습니다. 귀하의 응용 프로그램에 충분하지 않을 수 있습니다.
  • uint32_t존재를 보장하지 않습니다. typedef정확히 32 비트의 부호없는 정수 유형이있는 경우 구현에서 제공해야하는 것은 선택 사항 입니다. 예를 들어 일부는 9 비트 바이트를 가지고 있으므로 uint32_t.
  • uint_fast32_t의도를 명확하게 설명합니다. 성능 관점에서 가장 좋은 최소 32 비트 유형입니다 . uint_fast32_t실제로 64 비트 길이 일 수 있습니다. 구현에 달려 있습니다.

uint_fast32_t와 동일한 typedef가 있습니다 uint32_t

당신이보고있는 것은 표준이 아닙니다. 특정 구현 (BlackBerry)입니다. 그래서 당신은 거기에서 uint_fast32_t항상 같은 것을 추론 할 수 없습니다 uint32_t.

또한보십시오:


답변

차이점은 정확성과 가용성에 있습니다.

여기에 있는 문서 는 다음과 같이 말합니다.

너비가 각각 정확히 8, 16, 32 및 64 비트 인 부호없는 정수 유형 ( 구현이 유형을 직접 지원하는 경우에만 제공됨 ) :

uint8_t
uint16_t
uint32_t
uint64_t

너비가 각각 최소 8, 16, 32 및 64 비트 인 가장 빠른 부호없는 부호없는 정수 유형

uint_fast8_t
uint_fast16_t
uint_fast32_t
uint_fast64_t    

따라서 정확히 비트 uint32_t가있는 유형 이라는 차이점이 매우 분명 하며 구현시 정확히 32 비트 유형이있는 경우에만 이를 제공해야하며 해당 유형을 . 즉, 사용 가능 하거나 사용 가능 하지 않을 수 있습니다 . 32uint32_tuint32_t

한편, uint_fast32_t보유 일종 이상의 구현이 형식 정의를 수있는 경우에도 수단, 32 비트, uint32_t같은 uint_fast32_t 경우 는 제공한다 uint32_t. 가 제공하지 않는 경우 uint32_t, 다음 uint_fast32_t적어도이 모든 유형의 타입 정의 될 수있다 32비트.


답변

당신은 할 때 #include inttypes.h프로그램에서, 당신은 정수를 표현하기위한 다른 방법의 무리에 액세스 할 수 있습니다.

uint_fast * _t 유형은 주어진 비트 수를 나타내는 가장 빠른 유형을 정의합니다.

다음과 같이 생각해보십시오. 유형의 변수를 정의 short하고 프로그램에서 여러 번 사용하면 완전히 유효합니다. 그러나 작업중인 시스템은 유형 값으로 더 빠르게 작동 할 수 있습니다 int. 변수를 type으로 정의함으로써 uint_fast*t컴퓨터는 작업 할 수있는 가장 효율적인 표현을 선택합니다.

이러한 표현 사이에 차이가 없으면 시스템은 원하는 것을 선택하고 전체적으로 일관되게 사용합니다.


답변

빠른 버전은 32 비트보다 클 수 있습니다. fast int는 레지스터에 잘 맞고 정렬됩니다. 그러나 더 많은 메모리를 사용합니다. 이러한 배열이 많은 경우 더 많은 메모리 캐시 적중 및 대역폭으로 인해 프로그램 속도가 느려집니다.

일반적으로로드 명령 중에 32 비트에서 64 비트로 확장되는 부호가 발생할 수 있고 더 빠른 ‘네이티브’정수 형식이 있다는 생각이 구식이기 때문에 최신 CPUS가 fast_int32의 이점을 누릴 수 있다고 생각하지 않습니다.


답변