0
在一个循环中,我在开始时分配一些内存(可能在Linux ARM上高达2-3k),在它上面工作,然后释放它。由于循环有很多迭代,我想知道这样的分配/释放是否会碎裂堆,所以后续的“malloc”会失败。堆碎片
伪代码如下所示:
...
while(...){
list=malloc(N);
// do some work with list
free(list);
}
在一个循环中,我在开始时分配一些内存(可能在Linux ARM上高达2-3k),在它上面工作,然后释放它。由于循环有很多迭代,我想知道这样的分配/释放是否会碎裂堆,所以后续的“malloc”会失败。堆碎片
伪代码如下所示:
...
while(...){
list=malloc(N);
// do some work with list
free(list);
}
不,这是完全正常的。此外,堆分割开始成为更多分配之后的一个问题 - 具有不同的大小。另外,如果您仍然担心,只需在堆栈中使用alloca来进行分配,就像在循环中一样。
由于您一次又一次地分配相同的大小,并在两者之间释放它,您很可能会得到每个分配完全相同的块。 –