【问题标题】:Comparing access time of a char array vs uint8_t array vs int8_t array比较 char 数组与 uint8_t 数组与 int8_t 数组的访问时间
【发布时间】:2014-10-06 22:49:48
【问题描述】:

我观察到访问 char 数组中的数据项比访问 int 数组中的数据项花费的时间要少得多。我猜这是因为整数的大小大于字符的大小,因此“内存控制器”(在 C 中控制内存的东西-我不知道技术术语)必须移动更大的距离。

uint8_t char 和 int8_t 具有相同的大小。那么将数据存储在哪种数据类型的数组中会提供最快的访问时间。?

我创建了一个程序,将 150000 个单词存储在一个大小为 250000 个桶的哈希表中。当哈希表数组的数据类型为 int 时,加载时间为 0.16 秒,但当数据类型为 char 或 uint8 或 int8 时,加载时间在 0.08 到 0.11 秒之间变化。所以我的测试没有结果

【问题讨论】:

  • 能给我们一些代码和测试结果吗?
  • 你应该知道int8_tuint8_t通常分别从signed charunsigned char派生而来。现在再考虑一下访问时间是否可能不同。
  • 为什么不写一个测试
  • 完全依赖于平台。通常,查找char 数组涉及读取64/128 位并从中选择指定的char。使用缓存,这可能会一次获取 32 个字节。索引int 数组时也会发生同样的情况。
  • 给我们具体的证据证明访问charint 更快。

标签: c


【解决方案1】:

对此没有一般的答案。

这 100% 取决于您的硬件、编译器、操作系统、电源电压和月相。至少其中一些。

C 没有指定该级别的内容。

在具有字节寻址内存的典型(现代)计算机上,char 将是 8 位(“一个字节”)。这意味着uint8_t 将是unsigned char 的别名,int8_t 将是signed char

因此,uint8_tint8_tchar 的访问时间将相同,因为它们本质上都是相同的类型,只是符号语义不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-19
    • 2012-06-06
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    相关资源
    最近更新 更多