C++ static变量的问题
程序1:
class A {
void fun();
};
void A::fun()
{
static int arry[1000000] = {1};
}
int main()
{
return 0;
}
程序2:
class A {
void fun(){
static int arry[1000000] = {1};
}
};
void A::fun()
int main()
{
return 0;
}
这两个程序编译出来的大小程序1是4M左右,程序2是654 Byte,为什么会相差这么大??谁能从编译和汇编的结果上分析一下为什么??
程序1,我用readelf -a 看了下它的data区大小就有1000000*4byte大小,程序的ro区+data区是程序的大小我能理解,但程序2的data区很小,为什么都是static 变量处理却不一样,难道程序2的static变量不是放在data区,非0的全局变量和static变量都应该在data区域中啊???这里如何理解,坐等大神 汇编 c++
[解决办法]
多半给优化了呗,第二个是inline,而且class A压根没有用到过。
你自己在main中都声明个A的变量试试?
[解决办法]
内联函数的static变量的处理与普通函数不同,因为内联意味着函数会产生多个复本,而static要求只能有一个复本,所以要保证在函数产生多个复本的同时,其中的static变量都指向同一块内存。具体怎么做取决于编译器。
内联函数是可以放在.h里的。如果这个.h被多个.cpp包含,按普通方法处理,结果就会在每一个模块出现一份static数据,这样当然会有问题。非内联函数只能出现在一个模块里,所以没有这个问题。