在一个有许多迭代的循环中,在循环的开始处我分配一些空间,在其上进行操作并在最后释放它。类似的东西:在这种情况下发生堆碎片?
....
while(...){
list=malloc(N);
do_some_work_with_list(...)
free(list)
}
这里会发生碎片吗?
PS我已经尝试后这个问题,但事后如果重复
在一个有许多迭代的循环中,在循环的开始处我分配一些空间,在其上进行操作并在最后释放它。类似的东西:在这种情况下发生堆碎片?
....
while(...){
list=malloc(N);
do_some_work_with_list(...)
free(list)
}
这里会发生碎片吗?
PS我已经尝试后这个问题,但事后如果重复
这完全取决于平台的内存管理技术(如分配最大的空闲块第一个/最适合的空闲块)以及堆内存中当前的分配状态。
由于堆是动态内存分配的地方,如果发现足够大的单个块用于分配,那么一旦您稍后释放内存,就不会导致碎片。 如果之前由于堆中存在碎片而未找到单个块,那么通过这段代码(也考虑到系统上运行的其他线程可能同时分配内存),最可能的碎片可能会增加。
欢迎来到本网站!请不要在问题中发布您的电子邮件。 – dasblinkenlight
@ user1523271:http://webdocs.cs.ualberta.ca/~holte/T26/dyn-mem-alloc.html –