C++中一些类和数据结构的大小的总结
针对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++中一些类和数据结构的大小的总结的更多相关文章
- Arcgis CreateFishnet工具,生成到FileGDB中要素类的格网大小不一致
我的第一篇博客!哈哈 最近在做一些关于创建渔网的工作,发现一些问题,做个总结. 1.问题描述:如图1,设置好渔网的必要参数,输出目录为gdb里的矢量图层,(行列数比较大,渔网的地理范围较小),输出的格 ...
- C++中求类的大小
今天刷题时看到一题,是求类的大小的,其中涉及了内存的一些知识,记录一下. 正确答案是12和9 首先是内存对齐原则,可以参考这篇博文:http://www.cppblog.com/snailcong/a ...
- VC++中的类的内存分布(上)
0.序 目前正在学习C++中,对于C++的类及其类的实现原理也挺感兴趣.于是打算通过观察类在内存中的分布更好地理解类的实现.因为其实类的分布是由编译器决定的,而本次试验使用的编译器为VS2015 RC ...
- VC++中的类的内存分布(上)(通过强制转换,观察地址,以及地址里的值来判断)
0.序 目前正在学习C++中,对于C++的类及其类的实现原理也挺感兴趣.于是打算通过观察类在内存中的分布更好地理解类的实现.因为其实类的分布是由编译器决定的,而本次试验使用的编译器为VS2015 RC ...
- MFC中CArray类原理及其应用
1.CArray类应用 函数简介CArray::GetSize int GetSize( ) const;取得当前数组元素个数. CArray::GetUpperBound int GetUpperB ...
- 虚函数列表: 取出方法 // 虚函数工作原理和(虚)继承类的内存占用大小计算 32位机器上 sizeof(void *) // 4byte
#include <iostream> using namespace std; class A { public: A(){} virtual void geta(){ cout < ...
- Delphi中线程类TThread实现多线程编程1---构造、析构……
参考:http://www.cnblogs.com/rogee/archive/2010/09/20/1832053.html Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大 ...
- C++中派生类对象的内存布局
主要从三个方面来讲: 1 单一继承 2 多重继承 3 虚拟继承 1 单一继承 (1)派生类完全拥有基类的内存布局,并保证其完整性. 派生类可以看作是完整的基类的Object再加上派生类自己的Objec ...
- C++类所占内存大小计算
C++类所占内存大小计算 说明:笔者的操作系统是32位的. class A {}; sizeof( A ) = ? sizeof( A ) = 1明明是空类,为什么编译器说它是1呢? 空类同样可以实例 ...
随机推荐
- linux学习笔记-2.常用命令
说明:安装linux时,创建一个luao用户,然后使用root用户登陆系统 1.进入到用户根目录 cd ~ 或 cd cd / 返回到根目录 2.查看当前所在目录 pwd 3.进入到luao用户根目录 ...
- 多线程学习笔记二之JUC组件
目录 概述 JUC锁框架图 使用内置锁还是JUC显示锁? 概述 为了对共享资源提供更细粒度的同步控制,JDK5新增了java.util.concurrent(JUC)并发工具包,并发包新增了Loc ...
- 循序渐进学.Net Core Web Api开发系列【8】:访问数据库(基本功能)
系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇讨论如 ...
- POJ1274 The Perfect Stall[二分图最大匹配 Hungary]【学习笔记】
The Perfect Stall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 23911 Accepted: 106 ...
- BZOJ.2125.最短路(仙人掌 最短路Dijkstra)
题目链接 多次询问求仙人掌上两点间的最短路径. 如果是在树上,那么求LCA就可以了. 先做着,看看能不能把它弄成树. 把仙人掌看作一个图(实际上就是),求一遍根节点到每个点的最短路dis[i]. 对于 ...
- 使用POI操作PPT文档(插入文本、图片)转
1)如果是创建新的PPT文档,直接使用SlideShow和Slide类就可以,其中SlideShow表示PPT文档,Slide表示某一张幻灯片如下代码创建空的PPT文档: SlideShow ppt ...
- MikroTik RouterOS安装方法收集(转)
注意:ROS无法使用U盘安装,如果要使用ISO文件进行安装就必须使用光驱以及刻录成光盘,并且只能使用IDE的光驱. 一.首先了解常见的ROS硬件架构: X86架构(也是最常用的) mipsbe(欧米t ...
- [原创]浅谈H5页面测试介绍
[原创]浅谈H5页面测试介绍 目前移动互联网非常火热,除了各种App,H5也是非常热,由于H5跨平台,且版本更新容易,做为引流或获客是非常好的一种简单低成本平台:今天来谈谈H5页面测试都要测试什么? ...
- Linux虚拟主机管理系统---wdcp
关于WDCP这款虚拟主机管理系统,是疯子使用的第二款Linux虚拟主机管理系统,使用是挺简单的,以前好像是因为编码问题而放弃这款面板. WDCP功能比较完善,基本上需要的功能都能满足,例如:在线下载. ...
- Grid布局方式
wp7中Grid布局类似HTML中的表格,但是又不太一致! 为了测试新一个3行3列的Grid 方了方便,剔除掉其它XAML代码 [c-sharp:collapse] view plaincopy ...