c - 为什么数据结构的大小通常为 2^n?

标签 c data-structures size buffer

有什么历史原因吗?我见过好几次类似 char foo[256];#define BUF_SIZE 1024 的东西。即使是我也大多只使用 2n 大小的缓冲区,主要是因为我认为它看起来更优雅,这样我就不必考虑具体的数字。但我不太确定这是否是大多数人使用它们的原因,希望能提供更多信息。

最佳答案

可能有很多原因,尽管很多人会像您所说的那样只是出于习惯。

它非常有用的一个地方是循环缓冲区的高效实现,特别是在 % 运算符开销很大的架构上(没有硬件划分的架构——主要是 8 位微 Controller )。通过在这种情况下使用 2^n 缓冲区,模数只是对高位进行位屏蔽的情况,或者在 256 字节缓冲区的情况下,只需使用 8 位索引并让它环绕。

在其他情况下,与页面边界、缓存等对齐可能会为某些架构提供优化机会——但这将是非常特定于架构的。但可能只是这样的缓冲区为编译器提供了优化的可能性,所以在所有其他条件相同的情况下,为什么不呢?

关于c - 为什么数据结构的大小通常为 2^n?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1816727/

相关文章:

java - JMS 队列是 Java Util 队列的实现吗? Java 包中使用 Java Util Queue 实现的类有哪些?

c# - 用于识别重复值的数据结构

java - 在 Arraylist 类中使用 .size() 时出现 NullPointerException

javascript - 如何使用 TypeScript 确定一串代码中有多少 KB?

c - 修改学生结构体数组 array c 中的元素

c - 未对齐的指针性能

php - 以相同方式播种的 rand() 会产生不同的结果

c - 在结构中存储员工详细信息的程序

c++ - 无法替换两跳之外的全局变量

python - 元素的大小不会在 Kivy 中的应用程序加载时更新