例如,当我们写:
int * p = new int[5];
将在哪个内存段分配内存?
在C
我知道,当我们使用malloc()
时,它会在heap
部分中分配内存,但对于C++
,我不确定。我读过,new()
内存分配自免费商店和malloc()
内存分配从 this链接。
这个免费商店是什么?它只是RAM的一部分吗?是否存在包含免费存储的内存管理图,就像我们对C一样?
答案 0 :(得分:3)
您缺少的是C ++没有描述,也没有尝试描述这些物理机器细节。 C ++是一种抽象。 C ++源代码没有列出计算机要执行的一系列步骤:它描述了程序的含义。同样,该语言(通常)不会将此类实现细节强制为" heap"。
当它说" free store"时,语言标准指的是动态分配对象所在的存储概念区域。使用您的编译器,在您的计算机上,在这十年中,这可能是一个"堆"喜欢你熟悉的内存结构。或者,它可能在其他地方。我们不应该在哪里推理。
最终,你链接到的网站上的文字("如果是新的,内存是从免费商店分配的,就像在malloc()内存分配是从堆" )是完全错误的,这就是为什么你不应该从随机网站学习C ++。
答案 1 :(得分:1)
C ++标准没有指定。
所有声明p
动态存储时间。
实际上,您可能会发现它位于"堆" (这是一个实现概念而不是语言概念),与C的姐妹函数malloc
在"堆"上分配内存的方式大致相同。
答案 2 :(得分:0)
免费商店是两个动态内存区域之一,由new / delete分配/释放。对象生存期可以小于分配存储的时间;也就是说,免费存储对象可以在没有立即初始化的情况下分配内存,并且可以在不立即重新分配内存的情况下销毁它。