有什么历史原因吗?我见过好几次类似 char foo[256];
或 #define BUF_SIZE 1024
的东西。即使是我也大多只使用 2n 大小的缓冲区,主要是因为我认为它看起来更优雅,这样我就不必考虑具体的数字。但我不太确定这是否是大多数人使用它们的原因,希望能提供更多信息。
最佳答案
可能有很多原因,尽管很多人会像您所说的那样只是出于习惯。
它非常有用的一个地方是循环缓冲区的高效实现,特别是在 % 运算符开销很大的架构上(没有硬件划分的架构——主要是 8 位微 Controller )。通过在这种情况下使用 2^n 缓冲区,模数只是对高位进行位屏蔽的情况,或者在 256 字节缓冲区的情况下,只需使用 8 位索引并让它环绕。
在其他情况下,与页面边界、缓存等对齐可能会为某些架构提供优化机会——但这将是非常特定于架构的。但可能只是这样的缓冲区为编译器提供了优化的可能性,所以在所有其他条件相同的情况下,为什么不呢?
关于c - 为什么数据结构的大小通常为 2^n?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1816727/