针对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. 蓝牙设备探测工具blueranger

    蓝牙设备探测工具blueranger   blueranger是Kali Linux预安装的一款蓝牙探测工具.该工具通过向指定设备发送蓝牙L2CAP协议的ping包,创建连接.由于大部分蓝牙设备对pi ...

  2. python标准库--functools.partial

        官方相关地址:https://docs.python.org/3.6/library/functools.html 一.简单介绍: functools模块用于高阶函数:作用于或返回其他函数的函 ...

  3. Wannafly挑战赛21A

    题目链接 Wannafly挑战赛21A 题解 代码 #include <cstdio> #include <cmath> #define MAX 1000005 #define ...

  4. BZOJ.5068.友好的生物(思路)

    题目链接 \(Description\) 求\[\max\{\sum_{i=1}^{k-1}(C_i*|a_{x,i}-a_{y,i}|)-C_k*|a_{x,k}-a_{y,k}|\}\] \(So ...

  5. beta6

    吴晓晖(组长) 过去两天完成了哪些任务 对手写输入进行了重构,然后重新捋了一下bayes的思路 展示GitHub当日代码/文档签入记录 接下来的计划 推荐算法 还剩下哪些任务 过去两天完成了哪些任务: ...

  6. Android任务和返回栈完全解析(转)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/41087993 本篇文章主要内容来自于Android Doc,我翻译之后又做了些加工 ...

  7. [Java]Spring框架

    在这里学习Spring框架: >>spring&struts框架学习 >>spring >>Java回顾之Spring基础 >>IBM Java ...

  8. Windows平台开发Mapreduce程序远程调用运行在Hadoop集群—Yarn调度引擎异常

    共享原因:虽然用一篇博文写问题感觉有点奢侈,但是搜索百度,相关文章太少了,苦苦探寻日志才找到解决方案. 遇到问题:在windows平台上开发的mapreduce程序,运行迟迟没有结果. Mapredu ...

  9. android流量统计

    研究过一段时间的android流量统计发个自己的总结帖 1 android有一个TrafficStats类可以直接获取 总接受流量TrafficStats.getTotalRxBytes(), 总发送 ...

  10. Project 03- STM32F4xx PID controller

    Project 03- STM32F4xx PID controller CMSIS files from ARM provides ARM Math functions. There are als ...