分配具有不同数量和大小的项目的特定大小的数组

Posted

技术标签:

【中文标题】分配具有不同数量和大小的项目的特定大小的数组【英文标题】:Allocating a specific sized array with a varying number and size of items 【发布时间】:2015-03-07 16:55:42 【问题描述】:

我想初始化内存以用于需要上限为 2gb 的存储。基本上,我需要分配 2gb 内存,然后将项目添加到内存中,并且在添加项目时,确保它不会溢出分配的内存。我在看calloc(),因为这些项目应该存储在一个数组中,但它只允许我根据项目的数量和项目的大小来分配内存。因为我没有特定数量的物品,或者物品的特定尺寸,所以这不行。有没有办法我可以分配一个 2gb 数组,并让项目的数量和项目的大小动态>

【问题讨论】:

元素是否必须存储在连续的内存中?元素有多大?在任何情况下,一个普通的 C++ 数组(包括 std::vector)都不在了,因为它们只支持具有单一固定大小的单一类型。如果您提供一些有关您想要实现的目标的信息,也会很有帮助。 嗯,元素大小不一,但会被压缩,是的,内存应该是连续的。基本上,一个程序会发送经过压缩和编码的字符串,然后将它们存储在内存中并稍后查找它们。我有点想从头开始实现我自己的数据存储:/ 我不明白这需要如何连续存储元素。到目前为止,我的第一反应是使用list<string> 或任何其他类似的容器。您可以将该容器包装在一个跟踪已用内存量的类中,以便将其限制在某个限制。 【参考方案1】:

如果您不提前知道结束大小,您可以使用 std::list 或 std::vector。随着更多项目的添加,这些数据类型的存储空间将增加。

既然你说你也不知道每个项目的大小,你可以使用某种带有指针和大小变量的结构来存储每个单独的项目。

【讨论】:

以上是关于分配具有不同数量和大小的项目的特定大小的数组的主要内容,如果未能解决你的问题,请参考以下文章

如何制作具有特定数组大小的共享内存?

具有大小动态分配和预定大小的简单数组内存分配

数组的内存分配[重复]

动态调整 UICollectionView 大小以确保没有项目间距

Freemarker / Netsuite - 将变量分配给特定的项目数量

CSS Flexbox - 根据屏幕大小组织弹性项目