intn_t何时使用它以及何时不使用它

时间:2014-10-01 09:32:28

标签: c++

我在Windows 8 x64上使用Visual Studio 2013 Ultimate,我正在从头开发游戏(一个引擎,如果你愿意的话)。我考虑到了多平台,包括移动设备,而且我通过stackoverflow阅读,ILPLPLLP可能是一个问题。 我看到像int,long等类型非常松散地依赖于编译器,机器以及谁知道什么是其他的,而且一个字节不完全是8位加上微软有自己的额外类型 - 这些都是如此令人生畏 - 我问你是谁知道更好,伸出援助之手。

目前我倾向于int8_tint16_t等,因为他们看起来最符合这些想法:

  1. 保证我的类型在运行时不会在某些平台上溢出,甚至移动。例如:int x可以保持值100000(int在16位上最大65535)。

  2. 向我保证我正在使用最小尺寸的类型,不仅因为内存是一种宝贵的资源,而且首先是因为较大类型的操作较慢。否则我会使用128位类型(我不确定它是否存在于C ++中),因为我需要相对较好的几何精度,但我仍然不会为一些高度专业化的数学库的精度交换速度。 / p>

  3. 因此,我不需要那么多的控制,因为我需要了解类型大小,明智地使用我可以得到的所有空间和时间,因为游戏本质上是资源要求加上我正在使用大型数据结构(数千个元素)用于渲染。

    但是intn_t可能是错误的方法,因为它是固定的,不适应单个平台,其CPU针对不同大小的内存块进行了优化。

    在我的案例中,最合适的方法是什么? 什么时候建议使用intn_t,何时建议不要使用?

2 个答案:

答案 0 :(得分:0)

我建议你使用固定大小的整数,这样可以防止溢出。如果在某些平台上不可用,编译器会抱怨(并且编译错误比运行时错误好得多)。

答案 1 :(得分:0)

如果您只是针对一个平台,并且您不打算与任何内容互操作,那么我不会担心事情。

但是,如果您希望您的代码在各种平台(OSX,Linux,Windows)上进行编译,那么我将使用cstdint中定义的类型。此外,如果您计划与具有明确定义的大小的其他语言(例如,int在Java / C#中为32位)进行互操作,那么我会使用类似{{1}的类型因为你的代码是可移植的,而且你所做的事情更明确。