C++ 空白基类最优化(EBO 或 EBCO)
来源:互联网 发布:广联达预算软件盗版 编辑:程序博客网 时间:2024/06/06 10:45
对于c++中的一个空类
class X
{
};
事实上并不是空的,sizeof(X)并不等于0, 一般的结果是1。每个X的对象都有一个隐晦的1 bytes,是被编译器安插进去的一个char,这样可以使得这个class的两个objects在内存中配置独一无二的地址。
当X作为另一个类的成员时,如:
class A
{
public:
X x;
int a;
};
由于X占一个字节,int占4个字节,再加上编译器的alignment调整,sizeof(Y) = 8。
但是当一个类继承X时:
class Y : public X
{
public:
int a;
};
这时大部分编译器对于sizeof(Y)的结果是4,而不是8。这就是所谓的空白基类最优化在(empty base optimization-EBO 或 empty base class opimization-EBCO)。在空基类被继承后由于没有任何数据成员,所以子类优化掉基类所占的1 byte。EBO并不是c++标准所规定必须的,但是大部分编译器都会这么做。
#include<iostream>using namespace std;class Empty{};class Son1:public Empty{};class Component { int x; Empty t; };class Son2:public Empty{ int x; };int main(){ Empty t; printf("size of Empty: %d\n",sizeof(Empty));//1,被编译器安插进去的一个char,这样可以使得这个class的两个objects在内存中配置独一无二的地址 printf("size of t: %d\n",sizeof(t)); //1 printf("size of Son1: %d\n",sizeof(Son1)); //1 printf("size of Component: %d\n",sizeof(Component)); //8,字节对齐 printf("size of Son2: %d\n",sizeof(Son2)); //4,空白基类最优化 system("pause"); return 0; }参考:http://blog.csdn.net/luckyxiaoqiang/article/details/8494235
有人可能会问是否需要考虑this指针?
我觉得是不需要考虑的。首先看一下this指针的定义:C++ this 指针。this 指针是作为参数传递给每个成员变量的。它是指向本类对象的指针,它的值是当前被调用的成员函数所在的对象的起始地址。也就是说this指针是不存在于成员变量中的。
0 0
- c++空白基类最优化(EBO或EBCO)
- C++空白基类最优化(EBO或EBCO)
- C++ 空白基类最优化(EBO 或 EBCO)
- C++ - 空白基类最优化(empty base optimization, EBO) 详解
- C++ EBO 空基类最优化
- EBO,c++编译器有empty继承优化(编译期)
- 空基类优化EBO之深度探索
- EBCO技术
- asp.net程序性能优化的七个方面 (c#(或vb.net)程序改进)
- asp.net程序性能优化的七个方面 (c#(或vb.net)程序改进)
- CF-51C - Three Base Stations(二分或枚举优化)
- tomcat:去掉jsp中的空白行或空白
- 对C标准中空白字符的理解(转)
- VAO VBO EBO
- VBO-EBO-VAO-01
- 硬盘安装Ubuntu 8.10时分区步骤空白的解决方法(不用双硬盘或U盘)
- 如何让HTML标签元素紧挨着(消除元素或标签直接的空白间距)
- iOS 响应点击(单击或双击)scrollview空白处事件 使用NSNotification
- 边下边看 七款P2P下载软件全能大比拼
- FP-growth
- [POJ 3420]Quad Tiling(状压DP+矩阵乘法)
- C++学习 boost学习之-Signals
- mysql 创建索引,删除索引,查看索引
- C++ 空白基类最优化(EBO 或 EBCO)
- SSH返回json格式数据到easyui grid展示
- Java多态性理解
- [POJ 2014] Flow Layout · 模拟
- ueditor 和 公共的上传 控件 在一个页面的问题
- 开始刷leetcode day18:Pascal's Triangle II
- PathSum问题
- BitTorrent协议概述
- 第一篇博客