Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 成员变量驻留在哪个内存段中?_C++_Variables_Initialization - Fatal编程技术网

C++ 成员变量驻留在哪个内存段中?

C++ 成员变量驻留在哪个内存段中?,c++,variables,initialization,C++,Variables,Initialization,我很想知道初始化的成员变量在内存中的位置?i、 例如,css,bss,数据段,堆 如果我的问题很愚蠢,请不要诅咒我:) 比如说 class A { A(); int m_iVar; } A::A(int i) { m_iVar = i; } A::A() { m_iVar = 99; } main() { A o; // => After compilation, the object o, in which segment does it r

我很想知道初始化的成员变量在内存中的位置?i、 例如,css,bss,数据段,堆

如果我的问题很愚蠢,请不要诅咒我:) 比如说

class A
{
    A();
    int m_iVar;
}

A::A(int i)
{
    m_iVar = i;
}

A::A()
{
    m_iVar = 99;
}

main()
{
    A o; // => After compilation, the object o, in which segment does it reside? and especially  where does "m_iVar" reside
    A o1(5); // => After compilation here object o1, in which segment does it reside?and especially where does "m_iVar" reside?

    A *pA = new A; // After compilation, here the memory pointed by pA, I guess it goes to heap, but the variable "m_iVar" where does it reside
}

它和其他变量一样。标准中没有真正指定它,但是如果创建本地类实例,它通常会驻留在堆栈上,如果
new
It,它会驻留在免费存储中。正如您所期望的,成员变量就在实例内部。静态类变量可能位于其中一个数据段中


“编译后”,非静态实例不会驻留在任何地方,它们是在运行时创建的。

类类型的对象与
int
或任何其他类型的对象分配相同。非静态类成员在包含对象内分配

根据标准,本地对象默认具有“自动存储”,这是由操作环境的一部分(通常称为堆栈)实现的。对象是否或如何显式初始化并不重要

使用
new
根据标准从“空闲存储”分配内存,其实现也称为堆

静态存储是使用
Static
extern
或在命名空间范围内进行声明的结果,通常由编译器自行决定由数据段(如css、bss或数据)实现


constexpr
对象存在一个异常,如果没有使用对象的地址,它可能只在编译时存在,没有分配任何空间。

。编译器没有任何理由为此生成代码。相关:为什么不自己检查一下呢?:)查看编译器生成的汇编指令是一个有趣的练习,然后只要您有调试符号,就可以很容易地看到所有内容都存储在哪里。对于普通的老式C数据,在程序(字符串文本等)、堆栈(局部变量)和堆(用
new
分配的数据)中分配,或在静态中(用于
静态
外部
数据)。它们的名称(例如,“bss”)取决于特定的汇编程序和操作系统,不在C标准中。