1

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

4

3 回答 3

3

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

正是因为需要根据需要增长(和缩小)的“动态”数组,所以像 C++ 这样的语言引入了向量。他们在幕后进行管理。

于 2012-11-27T23:17:35.927 回答
2

你需要realloc函数。

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

于 2012-11-27T23:16:02.103 回答
-1

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

mmap您可以通过使用创建大型匿名映射 ( )来特别强制执行此行为,MAP_PRIVATE | MAP_ANONYMOUS例如,您打算最多保留多少。在现代 x64 系统上,虚拟映射最大可达 64Tb。从逻辑上讲,它是您的程序可用的内存,但实际上,当您开始使用它们时,页面将被添加到其中。

realloc正如其他海报所描述的那样,这是调整malloc映射大小的天真方法,但要确保 realloc 成功。它可能会失败!

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

于 2012-11-27T23:38:25.970 回答