【发布时间】:2019-01-19 23:50:59
【问题描述】:
我目前的项目涉及使用 5 维以上的数组,但数组的各个元素不需要有 256 个可能的值。我想知道是否可以通过使用自定义数据类型来节省内存空间,例如,只有 4 或 6 位来表示元素的值,以及这些内存节省是否会带来一些显着的性能成本。
【问题讨论】:
-
还有 C 和 C++ 中内置的位域功能,在这里可能有用:en.wikipedia.org/wiki/Bit_field
-
@Jeremy 位域几乎没有“计算效率”,而且非常不便携。
-
@NeilButterworth 计算效率是相对的,位字段大致与整数一样可移植(也就是说,在尝试与具有不同表示的其他机器通信时,您需要适当的序列化)。
-
@NeilButterworth 你有理由相信位域比完成相同任务的其他可用方法效率低吗? (AFAIK,当您开始执行位移/掩码操作时,效率会受到影响,并且几乎任何将值压缩为少于一字节的解决方案都会调用这些,无论是程序员编写显式逻辑或 STL 或编译器在幕后生成代码来执行它)。至于可移植性,位域代码将在任何兼容的 C 或 C++ 编译器上正确编译和运行,不是吗?
-
@NeilButterworth- 我必须承认我厌倦了看到宗教“不要使用 XYZ”的声明,因为几乎总是存在 XYZ 真正有用的情况。
int也有不可移植的用法(例如,可表示值的范围是实现定义的),但没有多少人因此建议避免使用int。位域是这个问题的一个有效选项,但在决定使用它们之前需要考虑一系列可移植性问题。 “计算效率”也是相对的——什么是可接受的取决于需求、编译器的实现质量等。