Windows 8 x64에서 Visual Studio 2013 Ultimate을 사용하고 있으며 처음부터 게임을 개발 중입니다 (원한다면 엔진). 모바일을 비롯하여 다중 플랫폼을 염두에두고 있으며 stackoverflow를 통해 읽은 바대로 ILP
, LP
, LLP
이 문제 일 수 있습니다. int, long 등과 같은 타입이 컴파일러, 머신에 매우 느슨하게 의존한다는 것을 알았습니다. 그리고 다른 바이트와 바이트가 정확하게 8 비트가 아닌 것을 알고있는 사람은 마이크로 소프트가 자체적 인 추가 타입을 가지고 있습니다 - 이것들은 매우 위협적입니다. 누가 손을 더 잘 아는 지. 그들이 가장 좋은 아이디어를 맞는 것처럼 그들이 보면 intn_t 사용시기 및 사용하지 않을 때
int8_t
으로,
int16_t
등을 기울고 있어요 :
저를 보장 유형 몇 가지 플랫폼에서의 오버 플로우를 런타임에, 심지어 이동. 예 :
int x
은 값 100000을 유지할 수 있습니다 (int는 16 비트에서 최대 65535 임).저는 메모리가 귀중한 자원이기 때문에뿐만 아니라 더 큰 유형의 작업이 더 느리기 때문에 작업에 가장 작은 크기의 유형을 사용하고 있습니다. 그렇지 않으면 내가 기하학에 대한 상대적으로 좋은 정밀도를 필요로하지만 여전히 고도로 전문화 된 수학 라이브러리의 정밀도에 대해 속도를 바꾸지 않기 때문에 128 비트 유형을 사용했을 것입니다 (C++에 존재하지는 않습니다).
그래서 내가 형 크기에 대한 인식을 필요로하는 내가 현명하게 게임 자원 자연 요구하고 있기 때문에 내가 할 수있는 모든 공간과 시간을 사용하여, 많은 컨트롤을 필요로하지 않는다는 것을 다음과 플러스 내가 일하고 있어요 렌더링을위한 큰 데이터 구조 (수천 개의 요소)가 있습니다.
은 고정되어 있고 개별 플랫폼에 맞지 않으므로 정확하게 갈 수있는 잘못된 방법 일 수 있습니다. CPU는 다른 크기의 메모리 블록에 최적화되어 있습니다.
필자의 경우 가장 적합한 방법은 무엇입니까? 언제 intn_t
을 사용하는 것이 좋습니까?
"더 큰 유형의 작업이 더 느립니다"는 올바르지 않습니다. 모국어가 아닌 단어 *에 대한 연산은 느려질 수 있지만 일반적으로 모든 정수 유형의 모든 연산은 실제 크기와 동등하게 "빠르다". 또한, 고정 된 크기의 정수를 사용하는 것은 오버플로를 방지하지 못한다. 예를 들어 값이 '255'인'uint8_t' 변수가 있다고 가정 해 보자. 그것에'1 '을 추가하면 오버플로됩니다. 그래도 최대 값을 쉽게 알 수 있지만 어쨌든 예를 들어 ['std :: numeric_limits'] (http://en.cppreference.com/w/cpp/types/numeric_limits). –
컴파일하려는 플랫폼이 모두 지원된다고 가정하면 고정 된 크기 유형이 좋습니다. 각 유형의 속도에 대해 걱정하는 것은시기 상 조기입니다.진정으로 걱정이된다면 int_leastN_t 또는 int_fastN_t 유형을 사용할 수 있지만 모든 플랫폼에서 크기가 동일하다는 것을 알면 이점이 없어지고 프로파일 링 없이는 느려질 것입니다. –
이제'word'speed에 대해 봅니다. 나는 "나중에"리팩터링을하지 않아도되도록하고 싶습니다. – mireazma