将数组类型更改为 Int16 会节省存储空间吗?
Will changing my array type to Int16 save storage?
这是我第一次在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 为整数的值提供标识
相关文章:
- 可用存储空间会消耗更多剩余内存吗?
- 在C++中,如果成员引用在其声明中初始化,为什么需要存储空间?
- 我应该以字符形式存储数字以节省内存吗?
- 有什么方法可以"factor out"公共字段以节省空间?
- 数组不会存储超出第一个空间的范围
- 将数组类型更改为 Int16 会节省存储空间吗?
- 尝试从每个预期数据之间有多个空间的文件中读取和存储数据
- 如何在文件中节省空间地存储和检索 std::vector<int> 值
- C 将字符串按空白空间将字符串拆分,除非将其封闭在引号中并存储在向量中
- 读取文件中的数字数量无限,存储在数组中(无空间)
- Apache 崩溃并显示错误 R6016 没有足够的空间来存储线程数据
- 如何通过空间分开输入并将其存储在C 中的向量中
- 数据类型对编译器来说何时意味着超过其存储空间
- 如何在不分配更多存储空间的情况下从数组初始化向量
- 如何在C++中创建虚拟存储空间
- C++删除不同函数中的存储空间
- 从技术上讲,对象是否可以占用不连续字节的存储空间
- 使用虚函数调用时节省堆栈空间
- c++最大数值存储空间
- 什么会消耗更多的存储空间 - boost::d ynamic_bitset<> 还是原始存储?