将数组类型更改为 Int16 会节省存储空间吗?



这是我第一次在C++中使用大型数据集。以前,我只是将我想要的任何内容存储在数组中。因为我现在正在生成 4000x4000 的高度图,所以我希望在我的程序突然吞噬 100 MB 之前提高内存效率(对于像我这样的独立用户来说有点过高)。

我将以块的形式加载大部分数据,但由于我的程序在执行过程中需要大量数据,因此我最终仍将使用大型 2D 数组。我想找到一种方法,让它们占用很少的内存。

我的高度图被设计成只接受小的整数值;可能小到适合Int8,但至少足够小,可以容纳Int16。到目前为止,我一直在使用Int类型,在我的实现中,这些类型是Int32种类的。

如果我将 2D 数组和矢量切换到Int16类型的集合,这会为我节省一半的存储空间吗?或者数组的一个元素仍然需要一个完整的字节,而只是将这些未触及的位保留为零?

如果您谈论的是固定宽度的整数类型,那么是的,int16_t保证是 16 位,没有填充位。您也可以自己验证:

std::cout << sizeof(int16_t[1000]) << " " << sizeof(int32_t[1000]); 

Int32切换到Int16(假设这与int16_t相同)(假设这与int32_t相同)会将数组产生的内存消耗降低一半(不考虑与可能动态大小的数组一起使用的任何簿记)

此外,int16_t需要 2 个字节,int32_t需要 4 个字节。16_t意味着 16 位。

没有未触及的位,只有那些您选择在运行时不使用的位。 与某些指针类型不同,没有带有整数的未使用位。 0 和 1 为整数的值提供标识

最新更新