free store 和 heap 总是让我们这些先学习 C,再学 C++ 的人感到混淆。

我们知道,C++的内存布局是这样的:

C++中的 “自由存储区free store” 和 “堆heap”_堆

那free store(自由存储区)在哪里呢?

——在这里:

C++中的 “自由存储区free store” 和 “堆heap”_内存布局_02

我们可以把 free store 理解成 heap 的一个子集。因为我们 new 出来的空间总是在 heap 上,而且,如果我们深入地去了解,我们会发现 new 申请空间的实现方式,其实是调用了 malloc,所以我们在C++中,或多或少可以将它们 2 个术语互用。

或者在刚开始学习时,我们可以简单的用 new, delete 的空间在 free store 上,malloc, free 及其变体的空间在 heap 上来做简单区分。