2014-10-01 149 views
0

我在Windows 8 x64上使用Visual Studio 2013 Ultimate,我從頭開發一個遊戲(如果你願意的話)。我有多平臺的思想,包括移動和我已經通過stackoverflow閱讀,ILP,LP,LLP可能是一個問題。 我看到類似int,long等類型非常鬆散地依賴於編譯器,機器以及誰知道其他什麼,並且一個字節不完全是8位加上微軟有它自己的額外類型 - 這些都是令人生畏的 - 我問你誰知道更好,伸出援助之手。intn_t什麼時候使用它,什麼時候不使用

目前我傾向於int8_tint16_t等,它們看起來像他們適合最好的這些想法:

  1. 擔保我的類型不會溢出一些平臺,甚至移動,在運行時。例如:int x可以保存100000的值(int是16位上的最大值65535)。

  2. 確保我使用最小尺寸的作業類型,不僅因爲內存是一種寶貴的資源,而且首先是因爲較大類型的操作較慢。否則,我會使用128位類型(我不確定它是否存在於C++中),因爲我需要相對較好的幾何精度,但我仍然不會爲一些高度專業化的數學庫的精度而交換速度。

所以接下去我,因爲我需要有關類型大小的認識並不需要儘可能多的控制,明智地使用所有的空間和時間,我可以得到,因爲遊戲是資源的性質,要求加我的工作具有大量數據結構(數千個元素)進行渲染。

但是intn_t可能是錯誤的方式,因爲它是固定的並且不適用於單個平臺,其CPU針對不同大小的內存塊進行了優化。

在我的情況下最適合的方法是什麼? 什麼時候建議使用intn_t並建議不要?

+2

「較大類型的操作速度較慢」不正確。對非本地字的操作*可能會較慢,但通常所有整數類型的操作均等於「快速」,與實際大小無關。另外,使用固定大小的整數不會防止溢出,例如可以說你有一個'uint8_t'變量,它的值是'255'。給它添加'1'就會溢出。儘管知道最大值比較容易,但是,無論如何,使用例如['的std :: numeric_limits'](http://en.cppreference.com/w/cpp/types/numeric_limits)。 – 2014-10-01 09:36:44

+0

假設您打算編譯的所有平臺都支持它們,固定大小的類型都可以。擔心每種類型的速度當然爲時過早。如果真的讓你擔心,你可以使用int_leastN_t或int_fastN_t類型,但是你不知道所有平臺上的大小都是一樣的,並且在沒有分析的情況下猜測某些事情會很慢。 – 2014-10-01 09:40:20

+0

我現在看到'word'speed。我想開始「正確」,以便以後不必重構。 – mireazma 2014-10-01 09:49:53

回答

0

如果你只是針對一個平臺,而你不打算與任何東西進行互操作,那麼我不會擔心事情。然而,如果你想讓你的代碼在各種平臺(OSX,Linux,Windows)上編譯,那麼我會使用在cstdint中定義的類型。另外,如果您打算與其他具有明確定義大小的語言進行互操作(例如int在Java/C#中爲32位),那麼我會使用類似int32_t的類型,因爲您的代碼將是可移植的,並且更加明確你在做什麼。

+0

這對我來說有點不清楚。我希望代碼在不同平臺上儘可能「一致地」運行。沒有涉及其他語言(當然,我們不計算dll)。也許我應該'typedef'類型,只是改變他們爲不同的平臺。這是個好主意嗎? – mireazma 2014-10-01 09:59:03

0

我建議你使用固定大小的整數,所以你防止溢出。如果它在某些平臺上不可用,編譯器會發出抱怨(並且編譯錯誤比運行時錯誤好得多)。

+0

我可以在我的代碼中用這樣的東西覆蓋類型:'typedef unsigned int uint32_t'等等?我搞砸了嗎? – mireazma 2014-10-01 10:11:38

+0

你爲什麼要那樣做?在這種情況下,你不會得到任何好處,比使用正常的整數... 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 2014-10-01 11:18:43

+0

點是定製'int',所以當編譯器看到'int'被強制使用固定的32位'int32_t'時。 – mireazma 2014-10-01 11:55:44

相關問題