new()运算符在哪个内存段使用时为prgrammer分配内存

时间:2018-03-06 11:11:48

标签: c++

例如,当我们写:

int * p = new int[5];

将在哪个内存段分配内存? 在C我知道,当我们使用malloc()时,它会在heap部分中分配内存,但对于C++,我不确定。我读过,new() 内存分配自免费商店malloc() 内存分配从 this链接。

这个免费商店是什么?它只是RAM的一部分吗?是否存在包含免费存储的内存管理图,就像我们对C一样?

3 个答案:

答案 0 :(得分:3)

您缺少的是C ++没有描述,也没有尝试描述这些物理机器细节。 C ++是一种抽象。 C ++源代码没有列出计算机要执行的一系列步骤:它描述了程序的含义。同样,该语言(通常)不会将此类实现细节强制为" heap"。

当它说" free store"时,语言标准指的是动态分配对象所在的存储概念区域。使用您的编译器,在您的计算机上,在这十年中,这可能是一个"堆"喜欢你熟悉的内存结构。或者,它可能在其他地方。我们不应该在哪里推理。

最终,你链接到的网站上的文字("如果是新的,内存是从免费商店分配的,就像在malloc()内存分配是从堆" )是完全错误的,这就是为什么你不应该从随机网站学习C ++。

答案 1 :(得分:1)

C ++标准没有指定。

所有声明p 动态存储时间

实际上,您可能会发现它位于"堆" (这是一个实现概念而不是语言概念),与C的姐妹函数malloc在"堆"上分配内存的方式大致相同。

答案 2 :(得分:0)

免费商店是两个动态内存区域之一,由new / delete分配/释放。对象生存期可以小于分配存储的时间;也就是说,免费存储对象可以在没有立即初始化的情况下分配内存,并且可以在不立即重新分配内存的情况下销毁它。

Click here for details