Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用';短';在C++;_C++ - Fatal编程技术网

C++ 使用';短';在C++;

C++ 使用';短';在C++;,c++,C++,为什么对于任何数字输入,我们更喜欢整数而不是短整数,即使输入的整数很少 在我的x86上,short的大小是2个字节,int的大小是4个字节,分配它不应该比int更好更快吗 或者我说short不被使用是错误的 处理“本机”整数大小时,CPU通常速度最快。因此,尽管short可能比int小,但int可能更接近CPU中寄存器的本机大小,因此可能是两者中效率最高的 在典型的32位CPU体系结构中,加载32位值需要一个总线周期来加载所有位。加载16位值需要一个总线周期来加载位,再加上丢弃一半位(此操作仍可

为什么对于任何数字输入,我们更喜欢整数而不是短整数,即使输入的整数很少

在我的x86上,short的大小是2个字节,int的大小是4个字节,分配它不应该比int更好更快吗


或者我说short不被使用是错误的

处理“本机”整数大小时,CPU通常速度最快。因此,尽管
short
可能比
int
小,但
int
可能更接近CPU中寄存器的本机大小,因此可能是两者中效率最高的


在典型的32位CPU体系结构中,加载32位值需要一个总线周期来加载所有位。加载16位值需要一个总线周期来加载位,再加上丢弃一半位(此操作仍可能在一个总线周期内发生)。

如果有一个大数组充满位,并且int太大,则短类型非常有用

考虑到数组足够大,节省内存将非常重要(而不仅仅是使用int数组)

Unicode数组也以短格式编码(尽管存在其他编码方案)

在嵌入式设备上,空间仍然很重要,短空间可能非常有益


最后但并非最不重要的一点是,一些传输协议坚持使用短消息,因此您仍然需要使用短消息。

如果您在内存中保留了大量短消息(例如,在大型阵列中),则16位短消息是有意义的,其大小减少了50%,从而显著减少了内存开销。正如格雷格正确指出的那样,在现代处理器上,它们的速度不超过32位整数。

在嵌入式系统中,
short
无符号short
数据类型用于访问比本机整数需要更少位的项

例如,如果我的USB控制器具有16位寄存器,而我的处理器具有本机32位整数,我将使用
无符号短
访问寄存器(前提是
无符号短
数据类型为16位)。

大多数有经验的用户的建议(参见News:COMP.Lang.C.+.主持)是使用本机整数大小,除非必须使用较小的数据类型。使用
short
保存内存的问题是,这些值可能超过
short
的限制。此外,这可能会对某些32位处理器的性能造成影响,因为它们必须获取16位变量附近的32位,并消除不需要的16位。


我的建议是,首先提高程序的质量,只有在有保证的情况下才考虑优化,并且您的日程安排中有额外的时间。

使用type
short
不能保证实际值小于type
int
的值。它允许它们变小,并确保它们不会变大。还要注意,
short
的大小必须大于或等于才能键入
char

上面的原始问题包含所讨论的处理器的实际大小,但在将代码移植到新环境时,只能依靠较弱的相对假设,而不能验证实现定义的大小


C标题——或者,从C++,定义了一个指定大小的类型,如“代码> UIT88T < /代码>,为一个完全八位宽的无符号整数类型。尝试符合外部指定的格式(如网络协议或二进制文件格式)时,请使用这些类型。

Age是一个不好的示例,因为它最好存储在未签名类型中。不管是短的还是整数的,最好是储存他们的生日。由于年龄字段必须保持同步,我对其进行了编辑,我想现在应该可以了:)我同意年龄应该是无符号的,但我只是在寻找短v/s int的答案。那么有没有可以使用短v/s int的情况?直到今天我才想到这一点,因为我想我们已经习惯于使用int.“short”可能用于文件格式和网络协议,如果加载一个16位的值也可以在一个总线周期内完成,那么使用32位有什么好处呢?格雷格说,它可能在同一个周期内发生,但不一定如此。而且,生成的机器代码越多,指令缓存占用的空间就越大。如果一个结构由2个短字符或2个整数组成,那么哪一个更好、更高效呢?Unicode编码不是很短。首先,您考虑的是
wchar\u t
,这是一种独特的类型,其次,最常见的编码可能是字节大小的UTF-8。UTF16是Windows上的默认值,但它远不是Unicode编码。最后,还有UTF32。我实际上想到了utf16,它实际上是一个简短的名称,尽管你可能会把它命名为wchar\t。这种编码通常用于内存中的表示。(正如您所说,windows使用它,java使用它,等等)16位整数之间没有16位的填充吗?在某些处理器上,当您使用16位整数时,它在一个通用“寄存器”中处理,该寄存器可以处理32位OA以及64位数字。它只是决定在选择短路操作时只考虑较低的16位。然而,在C++中,程序员都不知道,短数据类型实际上是16位,没有填充或其他技巧。我没有寻找优化,我只是好奇为什么为什么Stand从来没有被使用过。由于我在任何地方都找不到任何令人信服的理由,我认为优化部分就是问题所在。谢谢你的回复,顺便说一句。你应该提到谢谢你的建议。我就这个话题又加了一段。