c - 在这种情况下是否发生堆碎片?

标签 c memory heap-memory

在一个有很多迭代的循环中,在循环的开始我分配一些空间,处理它并在结束时释放它。类似的东西:

....
while(...){
  list=malloc(N);
  do_some_work_with_list(...)
  free(list)
}

这里会不会产生碎片?

PS 我已经尝试发布这个问题,但后来找不到了,抱歉,如果重复

最佳答案

好吧,这取决于。如果没有其他分配发生,也不会发生碎片,因为分配的 block 将在分配下一个 block 之前被释放。但是,如果 do_some_work_with_list 分配了返回前未释放的内存,则可能会发生碎片。此外,如果其他线程、库调用等在那里分配,可能会产生碎片。

关于c - 在这种情况下是否发生堆碎片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13430422/

相关文章:

c - C 中简单配置参数的正确数据结构是什么?

允许不可编译代码的#ifdef的Java等价物

使用 ulimit 命令更改堆栈上的软限制

c - 难以理解MACRO的偏移量

C#优化内存使用: How to free memory claimed by DataTable

c++ - 类私有(private)成员 C++ 的动态内存分配与 std::vector

c++ - 初始化 vector 时检查错误分配

java - 生成大型 double 组(> 6000 万个对象)时出现 Java OutOfMemory 堆空间错误

c - 使用指针读取结构值

c++ - 在运行时加载 DLL