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

时间:2018-07-24 20:39:23

标签: c memory malloc free

最近在一次采访中有人问我这个问题。

假设有一个大型的 C 程序库,并且每个程序都不断malloc()free() s个数据块。如果您在程序的一次运行中有100万次调用malloc()free(),您会怎么办。如果为您提供了非常大的内存堆存储空间,您将如何添加答案?

2 个答案:

答案 0 :(得分:6)

可能发生的一件事是您的内存将碎片化,尤其是在您分配不同大小的块时。

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

答案 1 :(得分:0)

这真的是一个愚蠢的问题,没有更多的限定词。假设你做

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

在这种情况下,几乎不会发生任何事情。

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

您获得的结果完全取决于malloc的实现以及对malloc和free的调用顺序。