【发布时间】:2021-12-27 10:09:46
【问题描述】:
我有一个变量,其大小在运行时确定。
每次添加新元素时realloc 是否更好,例如:
array_type * someArray;
int counter = 0;
//before a new element is added:
counter ++;
someArray = realloc(someArray, counter * sizeof(array_type));
或者使用malloc 一次分配比可能需要更多的内存:
array_type * someArray = malloc(ENOUG_MEMORY * sizeof(array_type));
在效率(速度)、可读性和内存管理方面什么是最好的?为什么?
【问题讨论】:
-
我认为这取决于用例。
-
另一种选择是在每次“满”时按某个选定的百分比或选定的元素数量增长它,我们需要添加它。
-
通常内存(重新)分配是一个繁重的过程(因为如果本地池较低,可能会涉及操作系统)。标准技术是为每次扩展定义一块内存来分配,以这种方式限制对系统资源的访问。当然,如果重新分配应该在流程开始时发生或数量有限,您可以决定继续进行单次重新分配。与往常一样,这取决于上下文。附:在一些小型或嵌入式系统上,内存分配会影响整个系统的性能或导致内存不足。在这些情况下,策略是强制的
标签: c memory memory-management malloc realloc