使用哪个int实现?

时间:2017-04-18 13:38:03

标签: c++ types directx-12

我正在使用DirectX 12 API在c ++中编写视频游戏引擎。通过这样做,我发现了数据类型 __ int64 ,这显然是Microsoft特定大小的类型。因此,我想到了两个问题:

大小为int(如" int [size] _t ")通常比标准 int 更有效,假设正在选择正确的尺寸?

哪种数据类型超出" int [size] _t "," __ int [size] "和" int [size] "我应该使用,考虑到不同计算机系统之间的效率和兼容性吗?

2 个答案:

答案 0 :(得分:1)

就个人而言,我会避免使用__int64之类的整数类型的任何非标准符号,因为你放弃了可移植性。

标准固定宽度类型可在<cstdint>中找到。但编译器不一定要支持它们,但如果它们这样做,那么它们必须遵循规范的字母:例如std::int32_t是32位2的补码有符号整数类型。在您的系统上,您可能会发现__int64std::int64_t都是typedef的{​​{1}}。

性能而言,您可能会发现使用long long会更好,因为这通常是CPU的本机整数类型。 (虽然情况并非总是如此:Turbo C ++是一个值得注意的例外)。但是,正如您所知,int的规范是故意模糊的。例如,可以是带符号的幅度类型,范围为-32767到+32767。

所以这是可移植性和性能之间的折腾。您可能会发现int为您提供了两全其美的优势。

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

答案 1 :(得分:0)

  

假设选择了正确的大小,大小的int(如&#34; int [size] _t&#34;)通常比标准int更有效吗?

取决于您对效率的意义。在内存方面,您知道它们占用了多少空间,因此它们通常具有更高的内存效率。还有uint_leastn_t类型可以用于内存优化(选择可以存储至少 n 位的最小可用类型)。

就速度而言,对齐访问可能是一个问题。 int类型通常对应于CPU的对齐方式,因此它可能比让uint16_t更快,但这当然是高度系统特定的。

C标准完全了解这个问题,因此如果考虑速度,则应使用uint_fastn_t类型的cstdint.h,例如uint_fast32_t。然后,您将获得至少 n 位的最快类型。

  

&#34; int [size] _t&#34;,&#34; __ int [size]&#34;中的数据类型和&#34; int [size]&#34;我应该使用,考虑到不同计算机系统之间的效率和兼容性吗?

  • 为了获得最大的便携性,您应该使用固定大小的类型,例如uint32_t
  • 为了获得最大的速度效率,您应该使用&#34; fast&#34;类型,例如uint_fast32_t
  • 对于内存效率优化的极少数情况,您可以使用&#34;最少&#34;类型,例如uint_least32_t
  • 很少有任何理由使用int。这主要是为了向后兼容旧代码。
  • 没有理由使用非标准__int32

语言律师会发表评论说stdint.h不再是强制性的,但没有理智的人会使用不支持它的新编译器。