在此网页上,对于unsigned short数据类型的评论如下:
为什么会这样呢?这种数据类型用于减少内存使用量(尽管生成的可执行文件可能比使用int更大且可能更慢)
我认为"probably slower"这个用语太过严谨。
一个理论事实是:
计算至少使用int
大小,例如:
short a = 5;
short b = 10;
short c = a + b;
a
和 b
被转换为 int
并相加。结果被再次转回 short
。你无法避免它,因为在 C++ 中的算术运算至少使用 int
大小,这被称为整数提升。short
/int
数组的函数:https://godbolt.org/z/KnxEJA。显然,GCC针对AVX2使用打包的16位加法进行`short`(`vpaddw`指令)操作,因此不需要转换为`int`。 - Daniel Langr通常情况下,当一个short类型的变量传入函数时,它会被转换成int类型。这就需要额外生成一些代码来完成这个过程。因此,即使你定义了一个short类型的变量,函数也会将其视为int类型。
long
类型,如果参数通过64位寄存器传递:https://godbolt.org/z/FFd4-7。 - Daniel Langr
int
通常用作本机 CPU 字长,因此在内存和 CPU 寄存器之间移动时可能更快。这主要涉及对齐问题。 - Some programmer dudefloat
被“用于在所使用的值不变化广泛时减少内存使用”也是可疑的(float
确实有较窄的范围,但它也具有较粗糙的精度)。至于double
,它说:“表示处理器处理的数据的‘正常’大小;这通常是使用的浮点数据类型”,这是没有依据的。(名称“double”暗示它是默认大小的两倍。) - Eric Postpischil