c ++中的内存分配

时间:2011-02-08 04:12:25

标签: c++ memory

  

可能重复:
  Stack,Static and Heap in C++

大家好,

我目前正准备接受采访,而且我经常会看到诸如“静态”变量或“本地”/“全局”变量存储在哪里等问题,我完全感到困惑。

我知道两种内存:Stack和Heap。除此之外,还有其他类型的内存,其中存储了不同类型的变量。在一些地方,我甚至读过一些关于“数据片段”的内容,但我不确定这些内容是如何相互映射的。任何人都可以向我提供不同类型内存的链接/解释,以及存储所有不同类型的变量,最好与C ++相关。

谢谢, 钱德尔

2 个答案:

答案 0 :(得分:3)

为简化起见,基本上需要关注三个主要存储区域:

  1. 全局数据 - 堆栈或堆外的单个静态内存位置。这些是声明不是任何函数本地的变量。 (C / C ++“static”关键字的明显区别实际上是关于程序的哪些部分知道全局变量的名称。)

  2. 堆栈数据 - 动态,但推送和弹出函数调用。

  3. 堆数据 - new / malloc返回的内容,真正动态,内存持续到删除/释放,而不是函数退出。

答案 1 :(得分:0)

存在第三种存储,称为静态存储。本质上,这是可删除的运行时内存映像中的数据项的存储。它不能被分配或释放,它的生命周期基本上是程序的生命周期。在C ++中,类静态变量和globals一样存储在这个区域中。

在过去,一些处理器架构(特别是x86)使用分段寻址。在这种情况下,静态数据将驻留在数据段中。为了访问静态数据,您使用了相对于DS或ES寄存器中的段基的地址。然而,至少从20世纪90年代中期开始,操作系统架构已经转向平板存储器模型,其中所有段都是整体并覆盖整个存储器空间。因此,任何当前的面试问题都不应出现数据段。