针对class,虚函数等情况写了一些代码测试。

#include <stdio.h>

class A {
}; class B {
public:
void f();
void g();
}; class C {
public:
void f();
void g();
private:
int a;
}; class D {
public:
virtual void f();
}; class E: public D {
private:
int a;
}; class F{
private:
int a;
}; class G {
public:
virtual void f();
        virtual void g();
        virtual void h();
}; class H: public G {
private:
int a;
}; class I: public G {
}; class J: public I {
}; class K {
public:
virtual void f();
virtual void g();
private:
int a;
}; class L {
public:
virtual void f();
virtual void g();
private:
int a;
int b;
}; class M {
public:
virtual void f();
virtual void g();
private:
int a;
int b;
int c;
}; int main(int argc, char ** argv) {
printf( "A: %d, B: %d, C: %d, D: %d, E :%d, F: %d, G: %d, "
"H: %d, I: %d, J: %d, K: %d, L: %d, M: %d, "
"int size: %d, long size: %d, double size: %d.\n",
sizeof(A), sizeof(B), sizeof(C),
sizeof(D), sizeof(E), sizeof(F),
sizeof(G), sizeof(H), sizeof(I),
sizeof(J), sizeof(K), sizeof(L),
sizeof(M),
sizeof(int), sizeof(long), sizeof(double));
}

运行结果:

[sizeTest]$ g++ -o sizeTest sizeTest.cpp
[sizeTest]$ ./sizeTest
A: , B: , C: , D: , E :, F: , G: , H: , I: , J: , K: , L: , M: , int size: , long size: , double size: .

总结如下:

A: 空类占用1字节

B: 成员函数不占空间,所以仍然1字节

C: private变量仍然占用空间,int为4

D: 虚函数(表)占用1个long的大小,为8字节

E:变量排在虚函数表前面,所以要对齐,一共16字节

F: 没有成员函数,只有成员变量,也是int的4字节

G:多个虚函数不增加空间大小

H:与E一样的效果

I: 虚函数继承不增加大小

J: 多次继承也不增加

K,L,M:检验对齐的效果

long和double的size都为8,int为4.

C++中一些类和数据结构的大小的总结的更多相关文章

  1. Arcgis CreateFishnet工具,生成到FileGDB中要素类的格网大小不一致

    我的第一篇博客!哈哈 最近在做一些关于创建渔网的工作,发现一些问题,做个总结. 1.问题描述:如图1,设置好渔网的必要参数,输出目录为gdb里的矢量图层,(行列数比较大,渔网的地理范围较小),输出的格 ...

  2. C++中求类的大小

    今天刷题时看到一题,是求类的大小的,其中涉及了内存的一些知识,记录一下. 正确答案是12和9 首先是内存对齐原则,可以参考这篇博文:http://www.cppblog.com/snailcong/a ...

  3. VC++中的类的内存分布(上)

    0.序 目前正在学习C++中,对于C++的类及其类的实现原理也挺感兴趣.于是打算通过观察类在内存中的分布更好地理解类的实现.因为其实类的分布是由编译器决定的,而本次试验使用的编译器为VS2015 RC ...

  4. VC++中的类的内存分布(上)(通过强制转换,观察地址,以及地址里的值来判断)

    0.序 目前正在学习C++中,对于C++的类及其类的实现原理也挺感兴趣.于是打算通过观察类在内存中的分布更好地理解类的实现.因为其实类的分布是由编译器决定的,而本次试验使用的编译器为VS2015 RC ...

  5. MFC中CArray类原理及其应用

    1.CArray类应用 函数简介CArray::GetSize int GetSize( ) const;取得当前数组元素个数. CArray::GetUpperBound int GetUpperB ...

  6. 虚函数列表: 取出方法 // 虚函数工作原理和(虚)继承类的内存占用大小计算 32位机器上 sizeof(void *) // 4byte

    #include <iostream> using namespace std; class A { public: A(){} virtual void geta(){ cout < ...

  7. Delphi中线程类TThread实现多线程编程1---构造、析构……

    参考:http://www.cnblogs.com/rogee/archive/2010/09/20/1832053.html Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大 ...

  8. C++中派生类对象的内存布局

    主要从三个方面来讲: 1 单一继承 2 多重继承 3 虚拟继承 1 单一继承 (1)派生类完全拥有基类的内存布局,并保证其完整性. 派生类可以看作是完整的基类的Object再加上派生类自己的Objec ...

  9. C++类所占内存大小计算

    C++类所占内存大小计算 说明:笔者的操作系统是32位的. class A {}; sizeof( A ) = ? sizeof( A ) = 1明明是空类,为什么编译器说它是1呢? 空类同样可以实例 ...

随机推荐

  1. 算法初级面试题01——认识时间复杂度、对数器、 master公式计算时间复杂度、小和问题和逆序对问题

    虽然以前学过,再次回顾还是有别样的收获~ 认识时间复杂度 常数时间的操作:一个操作如果和数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作. 时间复杂度为一个算法流程中,常数操作数量的指标.常 ...

  2. bzoj 1171 并查集优化顺序枚举 | 线段树套单调队列

    详见vfleaking在discuss里的题解. 收获: 当我们要顺序枚举一个序列,并且跳过某些元素,那么我们可以用并查集将要跳过的元素合并到一起,这样当一长串元素需要跳过时,可以O(1)跳过. 暴力 ...

  3. bzoj 4036 集合幂级数

    集合幂级数其实就是一种集合到数的映射,并且我们针对集合的一些操作(or  xor and specil or )为这种映射定义运算.其中一些东西可以通过某些手段将其复杂度降低. orz vfk /** ...

  4. 9、Redis处理过期keys的机制

    写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- 1.Redis处理过期k ...

  5. div中嵌套img元素,4px空白

    写布局的过程中遇到一个问题,在div中嵌套了img元素,没有指定div的高度,嵌套之后div高度始终比img高4个像素,没有设置内外边距,找不到原因. 除非强制div的高度为img的高度,才能使div ...

  6. letter-spacing造成文字无法居中的问题

    在使用letter-spacing增加字体间距时,发现字体间距被扩大的同时,字体无法完全居中在div中,如下: 原因:letter-spacing是在字中间产生的间隔,第一个字旁边没有间隔,所以导致不 ...

  7. c#调用刀片小票打印机

    public static bool Print(int orderId, string orderTime) { bool b = true; string cut = ((char)29).ToS ...

  8. 使用position:relative制作下边框下的小三角

    在制作tab选项卡的时候,有时会有下边框,且下边框下另一个头向下的小三角,这全然能够用css来实现,而不必使用背景图片. 由于使用背景图片时会有一个问题,选项卡内容字数不同.导致使用背景图片时无法控制 ...

  9. linux设置命令行启动

    做spark,内存大的话运行很快,否则运行很慢,主节点用界面,其他用命令行,然后scp,或者ssh 去其他主机最访问 1, 关闭图形界面: [root@bogon ~]# init 3   // 关闭 ...

  10. React和Vue特性和书写差异

    Vue均使用ES6语法,主要以单文件组件为例,写法上优先使用缩写. React使用TS语法. 生命周期 Vue React 入口&根实例 Vue const app = new Vue({ / ...