我应该使用尽可能小的类型吗?

sim*_*sjo 4 compiler-construction optimization types processor

很久以前我记得读到你应该总是使用尽可能小的类型来存储你的数据,但几乎我读到的每一段代码都没有这样做。他们经常到处使用 32 位整数。

我听说 32 位值的获取速度与 8 位值一样快,但处理器有某种方法可以一次获取几个较小的值。对吗?

因此,如果我使用 4 个字节而不是 4 个整数,编译器是否应该能够优化它,以便在单个 32 位寄存器中获取/存储 4 个字节?

或者这一切真的只是过早的优化,潜在的性能提升可以忽略不计?

小智 5

确实是过早的优化!但是,一旦进行优化,还取决于您的架构。例如,在 ARM 上,内存访问必须是 32 位对齐的(有些指令可以做到这一点,但它们只是执行 32 位访问,然后在幕后进行掩码/移位)。如果您使用一个字节,编译器通常会为每个“字节”分配四个实际字节的 RAM,以便可以更快地访问它(更不用说如果您尝试访问未对齐的字节而没有特殊代码来处理它们,CPU 会吓坏了)。

对所有内容都使用“int”是有争议的,因为它是 CPU 的首选大小,但基本上,只需使用您需要的大小类型,让编译器担心优化:D