字可寻址存储器

问题描述

对于 32 位字可寻址存储器,字的大小为 4 个字节。

如果我尝试存储使用少于 4 字节内存的数据结构,比如 2 字节。剩下的2个字节是不是浪费了?

当我们决定使用什么数据结构时,我们是否应该考虑字长?

有类似的问题 here 但不完全是我要问的。

请帮忙。

解决方法

在现代 CPU 上,内存本身通常在称为缓存行的块中检索(x86 上为 64 字节),但 CPU 指令集可以寻址单个字节。

如果您有一些深奥的机器,其指令集无法处理单个字节,那么您的编译器会将其隐藏起来。

在小于单词的数据结构中是否浪费内存取决于您使用的语言及其实现,但通常,记录根据具有最粗略要求的字段对齐。如果您有一个由 16 位整数组成的数组,它们会紧密地打包在一起。

,

如果您有 3 个或 4 个整数,那么将它们存储在 2 个、4 个或 8 个字节中几乎没有关系。

如果您有 3 或 40 亿个整数,那么可能值得考虑使用更节省空间的结构。

一般来说,给定语言实现的自然整数大小在某些方面应该是最佳的,所以我的建议通常是“除非你知道它不合适,否则使用 int”并让编译器担心它 - 直到你有性能数据显示其他情况。