哪个更有效:Bit,byte还是int?

Dum*_*Guy 10 c++ struct types

假设你有一个类似于以下的结构:

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

  1. 别担心; 使用语义正确,最可读的东西
  2. 没有任何答案是正确的.这取决于平台和编译器.如果你真的在乎,那么你必须进行测试.

总的来说,我会坚持使用整体...除了性别,这应该是一个枚举.

  • @stijn:这有关系吗?它不像年龄/月/ ......也可能超过2 ^ 31. (5认同)

小智 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',但可以忽略另一个,哪种方式更适合缓存?)同样,这听起来不像你应该关注的主要区域.