c++空类的大小
来源:互联网 发布:人人美剧app for mac 编辑:程序博客网 时间:2024/05/20 10:55
定义一个空类,没有数据
class Empty
{public:
Empty();
~Empty();
protected:
private:
};
cout << sizeof(Empty);输出结果是1.为什么呢?
在大多数编译器中sizeof(Empty)获得1,因为面对“大小为零之独立非附属对象”,通常C++官方勒令默默安插一个char到空对象中。
下面看一下3个类,它们与Empty类有不同的关系
class Test1{private:int i;Empty e;// 复合};class Test2:private Empty//private继承{private:int i;};class Test3:public Empty//public继承{private:int i;};int _tmain(int argc, _TCHAR* argv[]){cout << "Class Test1:"<<sizeof(Test1)<<endl;cout << "Class Test2:"<<sizeof(Test2)<<endl;cout << "Class Test3:"<<sizeof(Test3)<<endl;cin.get();return 0;}输出结果是:
Class Test1:8
Class Test2:4
Class Test3:4
因为“独立非附属”对象的大小一定不为零,通常C++官方勒令默默安插一个char到空对象中。但是因为需要内存地址对齐,sizeof(int)为4,所以sizeof(Test1)为8.
而当派生类继承Empty类时,会有所谓的EBO(empty base optimization,空白基类最优化),所以sizeof(Test2)和sizeof(Test3)都为sizeof(int)=4.
延伸 对齐问题
(环境vs2010 Projects-Properties-Configuration Properties-C/C++-->Code generation-Struct Member Alignment, 没有修改过,默认值是Default,即8字节对齐)
若定义一个class
class Align
{
private:
int i;
};
则sizeof(Align) = 4。
若class Align
{
private:
char a;
int i;
};
则sizeof(Align) = 8。地址图char a(占一个地址单元)补齐 补齐补齐int i (占4个地址单元)若class Align
{
private:
char a;
short s;
int i;
};
则sizeof(Align) = 8。char a(占一个地址单元)补齐short s(占2个地址单元) int i(占4个地址单元)
若class Align
{
private:
char a;
int i;
short s;
};
则sizeof(Align) = 12。char a补齐补齐补齐int i short s 补齐补齐- 空类的大小
- 空类的大小
- 空类以及空类的大小
- 空类与空结构的大小
- 空类与空结构的大小
- C++:C++ 空类的大小及相关继承类的大小
- 空类大小的理解
- C++空类的大小
- c++空类的大小
- c++空类的大小
- C++空类的大小
- C++ 空类的大小
- C++空类的大小
- C++空类的大小
- C++空类的大小
- C++空类的大小
- 题目:空结构体和空类的大小
- 空类和空结构体的大小
- VC调用C#Dll之无法声明全局或静态变量变量
- 信息学院计算机相关专业本科生简历写作技巧
- spring配置数据源
- spring security 配置
- iOS从手动管理内存过渡到使用ARC
- c++空类的大小
- 创建表
- linux下IPTABLES配置详解
- String to Integer (atoi)
- ssh登陆远程主机(密码方式和key的方式)
- UVA 674 Coin Change ,Commence
- 月中总结。
- 分析IBinder体系中getService的流程
- android 增加重启功能