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