首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++ static变量的有关问题

2013-03-01 
C++ static变量的问题程序1:class A {void fun()}void A::fun(){static int arry[1000000] {1}}int m

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数据,这样当然会有问题。非内联函数只能出现在一个模块里,所以没有这个问题。

热点排行