最近在一次采访中有人问我这个问题。
假设有一个大型的 C 程序库,并且每个程序都不断malloc()
和free()
s个数据块。如果您在程序的一次运行中有100万次调用malloc()
和free()
,您会怎么办。如果为您提供了非常大的内存堆存储空间,您将如何添加答案?
答案 0 :(得分:6)
可能发生的一件事是您的内存将碎片化,尤其是在您分配不同大小的块时。
因此,如果您的内存容量不大,即使总可用内存大于请求的容量,某些malloc可能也会失败。
答案 1 :(得分:0)
这真的是一个愚蠢的问题,没有更多的限定词。假设你做
for (;;)
{
free (malloc(SOMEVALUE)) ;
}
在这种情况下,几乎不会发生任何事情。
让我们假设malloc和free以随机顺序发生。如果您有一个使用固定大小的块的malloc实现,则将获得与使用可变大小的块(=内存碎片)的结果不同的结果。
您获得的结果完全取决于malloc的实现以及对malloc和free的调用顺序。