C++对象模型探索 / 普通类对象占用的空间

一、空类的大小

#include class A{};int main()
{A obja;std::cout << "obja 的地址:" << &obja << std::endl;std::cout << "obja 的大小:" << sizeof(obja) <<" B "<< std::endl;return 0;
}

结果:

#include class A
{char c;int k;
};int main()
{A obja;std::cout << "obja 的大小:" << sizeof(obja) <<" B "<< std::endl;return 0;
}

结果:

#include class A
{
public:char c;int k;
public:void func1(){}static void func2(){}
};int main()
{A obja;std::cout << "obja 的大小:" << sizeof(obja) <<" B "<< std::endl;return 0;
}

 结果:

obja 的大小:8 B 

解释:

        上述测试结果是成员函数(静态和非静态)并不占用对象的空间,因为所有的对象公用一套成员函数的代码,所以若每个对象都存储一套函数代码就太浪费了,所以C++编译器将成员函数的代码放在了内存中的代码区。

五、综述

拓展:

        C++程序内存布局分为 全局数据区(data area)、代码区(code area)、栈区(stack area)、堆区(heap area)。

类别存储位置
类对象栈区 / 堆区
普通成员变量类对象
静态成员变量全局数据区(属于类)
普通成员函数代码区(属于类)
静态成员函数代码区(属于类)

 

(SAW:Game Over!)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部