C++ 什么时候使用较小的整数类型比默认的32位更好?

C++ 什么时候使用较小的整数类型比默认的32位更好?,c++,c,optimization,memory,C++,C,Optimization,Memory,从性能/执行速度/缓存的角度来看,使用默认的32位整数类型(如果可能的话是无符号的)比使用8位或16位更好(如果我们确定该值合适的话) 我很确定这取决于具体情况(可能是结构/类字段,最好使用较小的整数,因为对象会更小?或者最好默认为32位,这样指令就不会“填充”?) 根据我目前对具有多个条目的数据结构的理解,您更希望使用较小的类型(如8位短),以便缓存预取更有效(数据缓存中的值更多)。但我真的不知道在其他情况下使用较小的类型是否真的更好 提前感谢。除了占用更少的缓存外,较小的类型占用更少的磁盘空

从性能/执行速度/缓存的角度来看,使用默认的32位整数类型(如果可能的话是无符号的)比使用8位或16位更好(如果我们确定该值合适的话)

我很确定这取决于具体情况(可能是结构/类字段,最好使用较小的整数,因为对象会更小?或者最好默认为32位,这样指令就不会“填充”?)

根据我目前对具有多个条目的数据结构的理解,您更希望使用较小的类型(如8位短),以便缓存预取更有效(数据缓存中的值更多)。但我真的不知道在其他情况下使用较小的类型是否真的更好


提前感谢。

除了占用更少的缓存外,较小的类型占用更少的磁盘空间,并利用更少的网络带宽


一般来说,对于计算而言,CPU喜欢其本机大小,但是对于I/O较小的类型(更高的信息密度)是可取的。您对缓存预取的想法只是处理器缓存和系统RAM之间I/O的具体情况。

您有比您想象的更多的选择-如果没有具体示例(在问题中),我们将猜测或提供意见。请用a读。我想我不能提供一个例子,因为这是一个关于处理器如何工作的一般性问题,而不是一个特定的程序。。但是谢谢你的评论。这取决于具体情况(代码、平台、编译器)。在某些情况下,使用较小的字体确实会影响性能。某些操作只能使用32位操作数,编译器必须生成附加指令来填充/取消填充操作数。但浪费D-cache空间也会影响性能。检查生成的程序集并确定热路径的基准。此外,如果您关心性能,您可能会对面向数据设计的“新”概念感兴趣。youtube上对此进行了很好的讨论。一般来说,较小的数据类型,如
uint16\u t
uint8\u t
用于空间优化。32位处理器可以一次提取4个字节(
uint8\t
)。获取一个字节,特别是在未对齐的地址上,需要更多的工作。尽管许多处理器现在被设计为不受任何惩罚地获取一个字节。使用小于处理器字长的值实际上没有效率增益。大多数数据总线的设计都是为了适应处理器字长的宽度。在32位数据总线上传输32位与8位的成本是微不足道的。因此,一般的经验法则(因为是的,这就是我在这里寻找的)是,对于没有太多I/O操作的应用程序,我应该简单地使用本机类型,以避免无用的填充?@Pker:只要包括RAM和缓存,这通常不被认为是I/O,是的。@ PK不可能给出一个好的经验法则,对于每一个用例都有太多的因素需要考虑。我不会把时间浪费在过早地优化事情上,在特定情况下,这甚至可能是更糟糕的选择。这使得这更具技术性,我的快速结论是,试图找到经验法则对我没有任何好处,因为RAM/缓存几乎都是核心组件。我要读一本关于记忆的书。谢谢@πάνταῥεῖ 对,我得出了同样的结论。我不想做过早的优化或诸如此类的坏事,只是出于显而易见的原因,我正试图将我的设计导向缓存友好性。谢谢你的反馈。