针对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. Java日志记录--log4j and logback

    问题的引入: 把所有的信息打印在控制台上不行吗? 01.控制台有行数限制: 02.System.out.println()影响系统性能: 03.如果我们需要对一些用户的行为习惯进行分析,我们找不到用户 ...

  2. python 字典相关操作

    字典 字典的增删改查 字典的创建方式: # 创建字典类型 info = { 'name':'李白', 'age':'25', 'sex':'男' } msg = { 'user01':'Longzel ...

  3. 2016-2017 CT S03E06: Codeforces Trainings Season 3 Episode 6(8/13)

    2016-2017 CT S03E06: Codeforces Trainings Season 3 Episode 6 比赛连接: http://codeforces.com/gym/101124/ ...

  4. ftp通用类1

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...

  5. STM32 通用定时器相关寄存器

    TIMx_CR1(控制寄存器1) 9-8位:CKD[1:0]时钟分频因子,定义在定时器时钟(CK_INT)频率与数字滤波器(ETR,TIx)使用的采样频率之间的分频比例. 定义:00(tDTS = t ...

  6. STM32 通用定时器的几种配置方式

    STM32 通用定时器的几种配置方式 //------------------------------------------------------------------------------ ...

  7. Revit API修改链接文件房间边界

    start [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)] );//设置房间边界     ...

  8. delphi ribbon使用

    http://blog.csdn.net/davinciyxw/article/details/5604209 1.TextEditor(barEditItem)取文本 string editValu ...

  9. [Winform]缓存处理

    摘要 在对winform做的项目优化的时候,首先想到的是对查询,并不经常变化的数据进行缓存,但对web项目来说有System.Web.Caching.Cache类进行缓存,那么winform端该如何呢 ...

  10. C#各种泛型集合体验

    本篇体验除Queue<T>和Stack<T>之外的其它泛型集合. SortedList<TKey, TValue> SortedList<TKey, TVal ...