c++ - 大型矩阵的 uint8_t 和未指定 int 之间的区别

标签 c++ memory

我有一个超过 17,000 x 14,000 的矩阵,我用 C++ 将其存储在内存中。这些值永远不会超过 255,所以我想我应该将这个矩阵存储为 uint8_t 类型而不是常规的 int 类型。即使使用优化编译器,常规 int 类型是否会采用 native 字大小(64 位,因此每个单元格 8 个字节)?我假设如果我将数组存储为 uint8_t,我将使用少 8 倍的内存?

最佳答案

如果您对此表示怀疑,您可以尝试一下。

当然会小一些。

但是,这完全取决于您的使用模式,哪个会更快。轮廓!轮廓!简介!

意外性能考虑的原因:

  • 对齐问题
  • 元素共享缓存行(在顺序访问中可能是正数;在多核场景中可能是负数)
  • 增加了对原子读/写锁定的需求(在线程的情况下)
  • 某些优化的 MIPS 指令的适用性降低(?-我不是最新的细节;还有一个非常好的优化编译器可能简单地注册分配合适大小的临时文件)
  • 其他不相关的边界条件,源自周围的代码

关于c++ - 大型矩阵的 uint8_t 和未指定 int 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7612428/

相关文章:

C++:如何将数据输出到多个.dat 文件?

c++ - 类(class)成员重新排序

c++ - 通过 C++ 中的静态实例的单例——进入源文件或头文件?

c++ - 我可以安全地从 c++ 中的 std::stringstream 中获取 c_str 吗?

c - 释放 C 中分配的内存

php - 大型数组的 PHP QuickHash 经验

c++ - C++:将字符串复制到字符数组时出现问题

memory - 在游戏中寻找特定的内存位置?

c++ - C++ 中 sizeof 的行为

c - 为传递给函数的数组指针初始化内存时出现段错误