2014-10-01 1 views
0

Windows 8 x64에서 Visual Studio 2013 Ultimate을 사용하고 있으며 처음부터 게임을 개발 중입니다 (원한다면 엔진). 모바일을 비롯하여 다중 플랫폼을 염두에두고 있으며 stackoverflow를 통해 읽은 바대로 ILP, LP, LLP이 문제 일 수 있습니다. int, long 등과 같은 타입이 컴파일러, 머신에 매우 느슨하게 의존한다는 것을 알았습니다. 그리고 다른 바이트와 바이트가 정확하게 8 비트가 아닌 것을 알고있는 사람은 마이크로 소프트가 자체적 인 추가 타입을 가지고 있습니다 - 이것들은 매우 위협적입니다. 누가 손을 더 잘 아는 지. 그들이 가장 좋은 아이디어를 맞는 것처럼 그들이 보면 intn_t 사용시기 및 사용하지 않을 때

은 현재 내가 int8_t으로, int16_t 등을 기울고 있어요 :

  1. 저를 보장 유형 몇 가지 플랫폼에서의 오버 플로우를 런타임에, 심지어 이동. 예 : int x은 값 100000을 유지할 수 있습니다 (int는 16 비트에서 최대 65535 임).

  2. 저는 메모리가 귀중한 자원이기 때문에뿐만 아니라 더 큰 유형의 작업이 더 느리기 때문에 작업에 가장 작은 크기의 유형을 사용하고 있습니다. 그렇지 않으면 내가 기하학에 대한 상대적으로 좋은 정밀도를 필요로하지만 여전히 고도로 전문화 된 수학 라이브러리의 정밀도에 대해 속도를 바꾸지 않기 때문에 128 비트 유형을 사용했을 것입니다 (C++에 존재하지는 않습니다).

그래서 내가 형 크기에 대한 인식을 필요로하는 내가 현명하게 게임 자원 자연 요구하고 있기 때문에 내가 할 수있는 모든 공간과 시간을 사용하여, 많은 컨트롤을 필요로하지 않는다는 것을 다음과 플러스 내가 일하고 있어요 렌더링을위한 큰 데이터 구조 (수천 개의 요소)가 있습니다.

은 고정되어 있고 개별 플랫폼에 맞지 않으므로 정확하게 갈 수있는 잘못된 방법 일 수 있습니다. CPU는 다른 크기의 메모리 블록에 최적화되어 있습니다.

필자의 경우 가장 적합한 방법은 무엇입니까? 언제 intn_t을 사용하는 것이 좋습니까?

+2

"더 큰 유형의 작업이 더 느립니다"는 올바르지 않습니다. 모국어가 아닌 단어 *에 대한 연산은 느려질 수 있지만 일반적으로 모든 정수 유형의 모든 연산은 실제 크기와 동등하게 "빠르다". 또한, 고정 된 크기의 정수를 사용하는 것은 오버플로를 방지하지 못한다. 예를 들어 값이 '255'인'uint8_t' 변수가 있다고 가정 해 보자. 그것에'1 '을 추가하면 오버플로됩니다. 그래도 최대 값을 쉽게 알 수 있지만 어쨌든 예를 들어 ['std :: numeric_limits'] (http://en.cppreference.com/w/cpp/types/numeric_limits). –

+0

컴파일하려는 플랫폼이 모두 지원된다고 가정하면 고정 된 크기 유형이 좋습니다. 각 유형의 속도에 대해 걱정하는 것은시기 상 조기입니다.진정으로 걱정이된다면 int_leastN_t 또는 int_fastN_t 유형을 사용할 수 있지만 모든 플랫폼에서 크기가 동일하다는 것을 알면 이점이 없어지고 프로파일 링 없이는 느려질 것입니다. –

+0

이제'word'speed에 대해 봅니다. 나는 "나중에"리팩터링을하지 않아도되도록하고 싶습니다. – mireazma

답변

0

하나의 플랫폼만을 타겟팅하고 있고 다른 플랫폼과 상호 운용 할 계획이 없다면 걱정하지 않아도됩니다.

그러나 코드를 다양한 플랫폼 (OSX, Linux, Windows)에서 컴파일하려면 cstdint에 정의 된 유형을 사용해야합니다. 또한 잘 정의 된 크기를 가진 다른 언어 (예 : int이 Java/C#에서 32 비트)와 상호 작용할 계획이라면 코드가 이식 가능하고 훨씬 명확한 것처럼 int32_t과 같은 유형으로 가고 싶습니다. 당신이하고있는 일.

+0

나에게 조금 불분명하다. 가능한 한 "일관되게"다른 플랫폼에서 _run_ 코드를 사용하겠습니다. 다른 언어는 관련이 없습니다 (물론, 우리는 dll을 포함하지 않습니다). 어쩌면 내가'typedef' 형식을하고 다른 플랫폼에 맞게 형식을 변경해야 할 수도 있습니다. 좋은 생각입니까? – mireazma

0

오버플로를 방지하기 위해 고정 크기 정수를 사용하는 것이 좋습니다. 일부 플랫폼에서 사용할 수없는 경우 컴파일러에서 오류가 발생합니다 (컴파일 오류는 런타임 오류보다 훨씬 낫습니다).

+0

내 코드에서 다음과 같이 형식을 덮어 쓸 수 있습니까 : 'typedef unsigned int uint32_t' 등? 내가 뭔가 망쳐 놨니? – mireazma

+0

왜 그렇게 했습니까? 이 경우 일반 ints를 사용하는 것보다 이점을 얻지 못할 것입니다. C++ 11 표준은 * cstdint * 파일에 표준 유형을 가지고 있습니다. http://www.cprogramming.com/c++11/c++11-nullptr-strongly-typed-enum-class.html 및 http://www.slideshare.net/adankevich/c11-15621074 – Claudio

+0

을 참조하십시오. 요점은 컴파일러가'int'가 고정 된 32 비트'int32_t'를 강제로 사용할 때'int'를 커스터마이징하는 것입니다. – mireazma

관련 문제