代码之家  ›  专栏  ›  技术社区  ›  Batwoman05

在C代码中使用数百万个malloc()和free()的结果?

  •  5
  • Batwoman05  · 技术社区  · 6 年前

    假设有一个很大的图书馆 C 程序和每一个程序不断地更新 malloc() free() s数据块。如果有一百万个电话打给你,你认为会发生什么 malloc() 免费的 在程序的一次运行中。如果给你一个非常大的内存堆存储空间,你会给你的答案增加什么?

    2 回复  |  直到 6 年前
        1
  •  6
  •   jaudo    6 年前

    可能发生的一件事是,您的内存将被碎片化,特别是当您分配不同大小的块时。

    因此,如果内存大小不大,即使总可用内存大于请求的内存,某些malloc也可能失败。

        2
  •  0
  •   user3344003    6 年前

    这真是一个愚蠢的问题,没有更多的限定词。如果你愿意的话

     for (;;)
     {
        free (malloc(SOMEVALUE)) ;
     }
    

    在这种情况下,几乎不会发生什么。

    让我们假设mallocs和free以随机顺序出现。如果您有一个使用固定大小块的malloc实现,那么将得到与使用可变大小块(=内存碎片)的malloc实现不同的结果。