在c ++中分配内存

可能重复:
堆栈,静态和堆在C ++中

嗨,大家好,

我目前正在准备采访,很多时候我会看到像“静态”变量或“本地”/“全局”变量存储在哪里以及我完全困惑的问题。

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

谢谢,Chander


为了简化一下,基本上有三个主要存储区需要关注:

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

  • 堆栈数据 - 动态,但通过函数调用进行推送和弹出。

  • 堆数据 - 由new / malloc返回的内容,真正是动态的,内存一直存在,直到删除/释放,而不是函数退出时。


  • 有第三种存储,称为静态。 实质上,这是可执行文件的运行时内存映像中的数据项的存储。 它不能被分配或释放,并且它的寿命本质上是程序的寿命。 在C ++中,类的静态变量和全局变量一样存储在这个区域中。

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

    链接地址: http://www.djcxy.com/p/13791.html

    上一篇: Memory allocation in c++

    下一篇: How is heap and stack memories mananged, implemented, allocated