假设你有一个类似于以下的结构:
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
}
Run Code Online (Sandbox Code Playgroud)
在性能方面,哪个是存储每个字段的最佳数据类型?(例如位字段,int,char等)
它将用于x86处理器并完全存储在RAM中.需要存储相当大的数量(50,000+),因此需要考虑处理器缓存等.
编辑:好的,让我重新解释一下这个问题.如果内存使用不重要,并且无论使用哪种数据类型,整个数据集都不适合缓存,通常最好使用较小的数据类型将更多数据放入CPU缓存中,或者更好地使用更大的数据类型数据类型允许CPU执行更快的操作?我要求此仅供参考,因此不应考虑代码可读性等.
Chr*_*uin 13
总的来说,我会坚持使用整体...除了性别,这应该是一个枚举.
小智 6
int_fast#_t来自<stdint.h>或<boost/cstdint.hpp>.
也就是说,你会放弃简单性和一致性(例如,这些类型可能是字符类型,它们是C/C++中的整数类型,并且可能导致令人惊讶的函数分辨率),而不仅仅是使用int.
通过专注于其他领域,例如算法复杂性和访问模式,您将看到更显着的性能优势.
它将用于x86处理器并完全存储在RAM中.需要存储相当大的数量(50,000+),因此需要考虑处理器缓存等.
您仍然需要担心缓存(在您达到优化级别之后),即使整个数据不会被缓存.例如,您是否按顺序访问每个项目?不可预知的?或者按顺序从每个项目中只选择一个字段?比较struct { int a, b; } data[N];到int data_a[N], data_b[N];.(想象一下你需要一次'a',但可以忽略另一个,哪种方式更适合缓存?)同样,这听起来不像你应该关注的主要区域.