malloc和其他相关功能

时间:2012-11-27 23:10:33

标签: c malloc calloc

我有一个名为'ArrayA'的数组,并且它有多个整数但是我希望每次满足条件时在数组的末尾添加另外5个单元格。我该怎么做? (互联网不是很有帮助)

3 个答案:

答案 0 :(得分:3)

如果这是一个静态数组,则必须创建一个具有更多空间的新数组并自行复制数据。如果它被分配了malloc(),正如您的问题的标题所示,那么您可以使用realloc()自动执行此操作。请注意,数组的地址通常会发生变化。

正是由于需要“动态”数组根据需要增长(和缩小),所以像C ++这样的语言引入了向量。他们负责管理。

答案 1 :(得分:2)

您需要realloc功能。

另请注意,添加5个单元格不是最佳性能解决方案。 每次需要增加数组时,最好将数组的大小加倍。 使用两个变量,一个用于大小(使用的整数数)和一个用于容量(数组的实际内存大小)

答案 2 :(得分:-1)

在现代操作系统中,通常可以安全地假设,如果您分配很多的内存,那么它实际上不会消耗物理RAM,而只会作为虚拟映射存在。一旦页面(今天通常是4Kb的块)首次使用,操作系统将提供物理RAM。

您可以使用mmap创建大型匿名映射(MAP_PRIVATE | MAP_ANONYMOUS)来明确强制执行此行为,例如:尽可能多地保持住。在现代x64系统上,虚拟映射最大可达64Tb。它是逻辑上可用于您的程序的内存,但在实践中,页面将在您开始使用时添加到它。

其他海报所描述的

realloc是调整malloc映射大小的唯一方法,但要确保realloc成功。它可能会失败!

当您使用内存一次,不释放它并停止使用它时,会出现内存问题。相比之下,已分配但未受影响的内存通常不会使用除VM表条目之外的资源。