【发布时间】:2010-01-01 04:37:13
【问题描述】:
假设您有一个类似于以下的结构:
struct Person {
int gender; // betwwen 0-1
int age; // between 0-200
int birthmonth; // between 0-11
int birthday; // between 1-31
int birthdayofweek; // between 0-6
}
就性能而言,存储每个字段的最佳数据类型是哪种? (例如位域、int、char 等)
它将在 x86 处理器上使用并完全存储在 RAM 中。需要存储相当大的数量(50,000+),因此需要考虑处理器缓存等。
编辑:好的,让我重新表述这个问题。如果内存使用不重要,并且无论使用哪种数据类型,整个数据集都无法放入缓存中,那么通常是使用较小的数据类型将更多的数据放入 CPU 缓存中更好,还是使用更大的数据类型更好允许 CPU 执行更快操作的数据类型?我要求这个仅供参考,因此不应考虑代码可读性等。
【问题讨论】:
-
性能可能取决于您对结构的访问模式是什么,您可以描述预期的访问模式以获得合适的答案。
-
感谢您的建议,我已经添加了我的 senario。
-
性别可以表示为二进制 0 或 1,但更准确地表示为 0.0 和 1.0 之间的浮点数。
-
我更喜欢将性别表示为单位圆中某处的复杂值。我还没有看到不复杂的涉及性别的东西。
-
我最近在一个数据库上做了一些工作,其中“性别识别”与“生理性别”是不同的……这并不像大多数人想象的那么简单!