C++ c+中的内存分配+;
可能重复:C++ c+中的内存分配+;,c++,memory,C++,Memory,可能重复: 大家好 我目前正在准备面试,我经常看到这样的问题,比如“静态”变量在哪里,或者“局部”/“全局”变量存储在哪里,我完全感到困惑 我知道有两种内存:堆栈和堆。除此之外,还有其他类型的内存存储不同类型的变量。在一些地方,我甚至读到一些关于“数据段”的东西,但我不确定这些东西是如何相互映射的。任何人都可以为我提供不同类型的内存的链接/解释,以及所有不同类型的变量被存储,最好与C++相关。 谢谢, Chander简单地说,基本上有三个主要存储区域需要关注: 全局数据——堆栈或堆外的单个静态
大家好 我目前正在准备面试,我经常看到这样的问题,比如“静态”变量在哪里,或者“局部”/“全局”变量存储在哪里,我完全感到困惑 我知道有两种内存:堆栈和堆。除此之外,还有其他类型的内存存储不同类型的变量。在一些地方,我甚至读到一些关于“数据段”的东西,但我不确定这些东西是如何相互映射的。任何人都可以为我提供不同类型的内存的链接/解释,以及所有不同类型的变量被存储,最好与C++相关。 谢谢,
Chander简单地说,基本上有三个主要存储区域需要关注:
还有第三种存储,称为静态存储。本质上,这是可执行文件的运行时内存映像中数据项的存储。它不能被分配或释放,它的生命周期本质上就是程序的生命周期。在C++中,类静态变量在全局区域中存储,如全局变量。
在过去,一些处理器架构(特别是x86)使用分段寻址。在这种情况下,静态数据将驻留在数据段中。为了访问静态数据,您使用了一个相对于段基址的地址,该地址位于DS或ES寄存器中。然而,至少从20世纪90年代中期开始,操作系统体系结构就转向了扁平内存模式,在这种模式下,所有的内存段联合起来,覆盖整个内存空间。所以数据段不应该出现在任何当前的面试问题中。堆栈和堆不是两种内存。他们只是同一个组织的不同部分。此外,维基百科也有利于学习这种东西,不过,最好是让C++书保留知识(通过编写一个使用静态变量和动态内存分配的程序)。请参阅这个问题的答案:还有程序数据,如字符串文字,在一些操作系统中,这些代码的存储方式可能相当复杂。此外,内存的文本部分存储了指向该区域的代码函数指针。这是一个很好的、清晰的答案。Sam,他提到他的答案是关于一个人应该关注的存储区域。我怀疑大多数人是否需要了解记忆中的文本部分。