怎么写段程序证明一个类的静态数据成员是在编译时分配的内存空间
如何写段程序证明一个类的静态数据成员是在编译时分配的内存空间
如何写段程序证明一个类的静态数据成员是在编译时分配的内存空间,还有请问一个全局变量是在编译还是运行时分配内存空间呢
------解决方案--------------------
坐等高手,不知道怎么回答你
------解决方案--------------------
class A{
public :
static int a;
};
int A::a=1;
int main()
{
A::a=2;//这里下断点
return 0;
}
F5跑起来,断下来后转到反汇编就可以看到
00401310 mov dword ptr [A::a (40510Ch)],2 ////这是我这里的
40510Ch这个地址是绝对地址,也就是基址,所以程序已启动后这个内存就有了。
第二个问题肯定是程序只有在运行时才会分配内存空间。编译的时候静态及全局数据会写入到你的程序文件里,通常在.data区段。
------解决方案--------------------
分配空间都是在运行时的。
编译时生成的只是一个可执行程序,占用的只是磁盘空间。 何来分配内存空间之说。
类静态成员 类似于全局变量 ,其空间分配应该在main之前。
如何写段程序证明一个类的静态数据成员是在编译时分配的内存空间,还有请问一个全局变量是在编译还是运行时分配内存空间呢
------解决方案--------------------
坐等高手,不知道怎么回答你
------解决方案--------------------
class A{
public :
static int a;
};
int A::a=1;
int main()
{
A::a=2;//这里下断点
return 0;
}
F5跑起来,断下来后转到反汇编就可以看到
00401310 mov dword ptr [A::a (40510Ch)],2 ////这是我这里的
40510Ch这个地址是绝对地址,也就是基址,所以程序已启动后这个内存就有了。
第二个问题肯定是程序只有在运行时才会分配内存空间。编译的时候静态及全局数据会写入到你的程序文件里,通常在.data区段。
------解决方案--------------------
分配空间都是在运行时的。
编译时生成的只是一个可执行程序,占用的只是磁盘空间。 何来分配内存空间之说。
类静态成员 类似于全局变量 ,其空间分配应该在main之前。