我有一个超过 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/