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來進行分配,就像在循環中一樣。
由於您一次又一次地分配相同的大小,並在兩者之間釋放它,您很可能會得到每個分配完全相同的塊。 –