2017-04-18 61 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”。 –