2017-04-18 73 views
1

我正在使用DirectX 12 API編程C++中的視頻遊戲引擎。通過這樣做,我發現了數據類型__int64,這顯然是Microsoft特定的大小類型。因此,這兩個問題來到我的腦海:使用哪個int實現?

的大小INT的(如「INT [大小] _t」)通常比標準INT更高效,假定合適的尺寸被選擇?

AND

其數據類型超出 「INT [大小] _t」 的 「__int [大小]」 和 「INT [大小]」 我應該使用,具有效率和記住不同計算機系統之間的兼容性?

+1

MS編譯器'__int64'與'long long'和'std :: int64_t'完全相同。這只是在將標準添加到標準之前存在的一個名稱。 –

+0

我很抱歉發佈重複。感謝你的快速反應<3 – Pascalul

+0

@BoPersson相反,它是一個名字MS提出的,因爲他們從1999年直到最近才遵循先前的C標準。 – Lundin

回答

1

就個人而言,我會避免任何非標準符號的積分類型,如__int64,因爲你放棄了可移植性。

標準固定寬度類型可在<cstdint>中找到。但是編譯器不一定要支持它們,但是如果它們這樣做的話,他們必須遵循該信函的規範:例如std::int32_t是32位2的補碼有符號整型。在你的系統上,你可能會發現__int64std::int64_t都是typedef s對於long long

根據的性能你可能會發現你最好用int,因爲這通常是CPU的原生整數類型。 (雖然情況並非總是如此:Turbo C++似乎是一個明顯的例外)。但是,如您所知,int的規範有意含糊其詞。例如,它可能是是帶符號的幅度類型,範圍從-32767到+32767。

所以這是可移植性和性能之間的折騰。你可能會發現std::int_fast32_t給你兩全其美。

參考http://en.cppreference.com/w/cpp/types/integer

+0

由於您專門編寫了DirectX 12引擎,因此您無需擔心「int32_t」或「uint32_t」的「奇怪」實現。 DirectX 12僅在所有使用32位整數的Windows平臺上受支持(x64和ARM64使用LLP64,僅將指針擴展爲64位,請參見[MSDN](https://msdn.microsoft.com/en-us/library /windows/desktop/aa384083.aspx)) –

+0

一般來說,除非您在Microsoft平臺上創建必須與磁盤二進制文件,網絡數據包,交叉ABI邊界匹配或具有64位大小要求的結構,否則它通常是最有效的只要堅持''int''和''unsigned int''。對於C++編程,您應該知道何時適合使用「size_t」和「ptrdiff_t」。 –