c++, class的大小
不为类、对象的函数分配空间;
在类中如果有virtual声明的虚函数,则会隐藏一个指针,该指针指向虚函数表,这对于纯虚函数也是一样;
对于虚继承,还有一个指向父类的指针,该指针为指向虚基类的指针(Pointer to virtual base class)。
#include "stdafx.h"
#include <iostream>
using namespace std; #include "t1.h" class TNULL
{
};
class Ti
{
int i;
};
class Tic
{
int i;
char c;
};
class Tf
{
void f(void){}
};
class T_vf
{
virtual void f(void){}
};
class Tif
{
public:
void set(int x) {i = x;}
private:
int i;
};
class Ti_vf
{
public:
virtual void set(int x) {i = x;}
private:
int i;
};
class Ti_v0f
{
public:
virtual void set(int x) = ;
private:
int i;
}; class Ti_sf
{
int i;
static void sf(void){}
};
class TT
{
TT(){}
};
class TxT
{
~TxT(){}
}; class TTT
{
TTT(){}
~TTT(){}
private:
Tif* m_pTif;
}; class TTTFFF
{
public:
TTTFFF() {
m_pTif = new Tif;
m_pTif->set();
} ~TTTFFF(){
delete(m_pTif);
m_pTif = ;
}
void f1(void){}
void f2(void){}
void f3(void){}
private:
Tif* m_pTif;
};
class TTT_VFFF
{
public:
TTT_VFFF() {
m_pTif = new Tif;
m_pTif->set();
} ~TTT_VFFF(){
delete(m_pTif);
m_pTif = ;
}
virtual void f1(void){}
virtual void f2(void){}
virtual void f3(void){}
private:
Tif* m_pTif;
};
void t1(void)
{
cout<<"sizeof(char) = "<<sizeof(char)<<endl;
cout<<"sizeof(class TNULL) = "<<sizeof(class TNULL)<<endl;
cout<<"sizeof(class Ti) = "<<sizeof(class Ti)<<endl;
cout<<"sizeof(class Tic) = "<<sizeof(class Tic)<<endl; cout<<"sizeof(class Tf) = "<<sizeof(class Tf)<<endl;
cout<<"sizeof(class Tif) = "<<sizeof(class Tif)<<endl;
cout<<"sizeof(class T_vf) = "<<sizeof(class T_vf)<<endl;
cout<<"sizeof(class Ti_vf) = "<<sizeof(class Ti_vf)<<endl;
cout<<"sizeof(class Ti_v0f) = "<<sizeof(class Ti_v0f)<<endl; cout<<"sizeof(class Ti_sf) = "<<sizeof(class Ti_sf)<<endl;
cout<<"sizeof(class TT) = "<<sizeof(class TT)<<endl;
cout<<"sizeof(class TxT) = "<<sizeof(class TxT)<<endl;
cout<<"sizeof(class TTT) = "<<sizeof(class TTT)<<endl;
cout<<"sizeof(class TTTFFF) = "<<sizeof(class TTTFFF)<<endl;
cout<<"sizeof(class TTT_VFFF) = "<<sizeof(class TTT_VFFF)<<endl; TTTFFF t;
cout<<"sizeof(TTTFFF t) = "<<sizeof(t)<<endl; /*sizeof(TTTFFF t) = 4*/ }
/*
sizeof(char) = 1
sizeof(class TNULL) = 1
sizeof(class Ti) = 4
sizeof(class Tic) = 8
sizeof(class Tf) = 1
sizeof(class Tif) = 4
sizeof(class T_vf) = 4
sizeof(class Ti_vf) = 8
sizeof(class Ti_v0f) = 8
sizeof(class Ti_sf) = 4
sizeof(class TT) = 1
sizeof(class TxT) = 1
sizeof(class TTT) = 4
sizeof(class TTTFFF) = 4
sizeof(class TTT_VFFF) = 8
sizeof(TTTFFF t) = 4
请按任意键继续. . .
*/
扩展:
1. C++类的大小 http://www.cnblogs.com/luxiaoxun/archive/2012/09/01/2666395.html
2. C++ 虚函数表解析 http://blog.csdn.net/haoel/article/details/1948051
c++, class的大小的更多相关文章
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
- 8.仿阿里云虚拟云服务器的FTP(包括FTP文件夹大小限制)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html#iis 原文:http://dnt.dkill.net/Ar ...
- JavaScript动画-拖拽改变元素大小
▓▓▓▓▓▓ 大致介绍 拖拽改变元素大小是在模拟拖拽上增加了一些功能 效果:拖拽改变元素大小 ▓▓▓▓▓▓ 拖拽改变元素大小原理 首先这个方块得知道我们想要改变这个它的大小,所以我给它设定一个范围,当 ...
- C#中如何调整图像大小
在本篇文章中,我将介绍如何在C#中来调整你想要的图像大小.要实现这一目标,我们可以采取以下几个步骤: 1.首先要获取你想要调整大小的图像: string path = Server.MapPath(& ...
- javascript动画系列第四篇——拖拽改变元素大小
× 目录 [1]原理简介 [2]范围圈定 [3]大小改变[4]代码优化 前面的话 拖拽可以让元素移动,也可以改变元素大小.本文将详细介绍拖拽改变元素大小的效果实现 原理简介 拖拽让元素移动,是改变定位 ...
- 1199 Problem B: 大小关系
求有限集传递闭包的 Floyd Warshall 算法(矩阵实现) 其实就三重循环.zzuoj 1199 题 链接 http://acm.zzu.edu.cn:8000/problem.php?id= ...
- Android SearchView 自定义SearchIcon和字体颜色大小
自定义SearchView的搜索图标和字体属性相对复杂一些,记下来. 一.自定义SearchIcon 1.API版本低于21:版本小于21时,要修改SearchIcon比较复杂,需要先获取到Searc ...
- ARM CPU大小端
ARM CPU大小端: 大端模式:低位字节存在高地址上,高位字节存在低地址上 小端模式:高位字节存在高地址上,低位字节存在低地址上 STM32属于小端模式,简单的说,比如u32 temp=0X1234 ...
- [函數] Firemonkey Android 取得系统参数设定的字型大小
Android 系统参数设定内,可以设定字型大小: 可以透过下面代码来取得字型大小比例: function FontScale: Single; var Resources: JResources; ...
- [转载]windows 7 IIS 7.5 ASP.Net 文件上传大小限制
原文出处: 原文作者:云中岳 原文链接:http://www.cnblogs.com/netlover/archive/2011/07/08/Win7_IIS_Upload.html IS 7 默认文 ...
随机推荐
- tomcat简介之web.xml详解(转)
http://blog.csdn.net/facepp/archive/2008/04/19/2306602.aspx 位于每个Web应用的WEB-INF路径下的web.xml文件被称为配置描述符,这 ...
- 引用 字库编码Unicode相关知识
引用 weifeng.shen 的 字库编码Unicode相关知识 1. 各地编码 首先说明一下现在常用的一些编码方案: 1. 在中国,大陆最常用的就是GBK18030编码, ...
- Going Home(最大匹配km算法)
Going Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20115 Accepted: 10189 Desc ...
- 针对苹果最新审核要求 为应用兼容IPv6
本文授权转载,作者:我不是段誉(简书) 在WWDC2 015上苹果宣布iOS 9将支持纯IPv6的网络服务.2016年初开始所有提交到App Store的应用必须支持IPv6.而今年5月初,苹果宣布6 ...
- CodeForces 525C Ilya and Sticks 贪心
题目:click here #include <iostream> #include <cstdio> #include <cstring> #include &l ...
- BZOJ 3384: [Usaco2004 Nov]Apple Catching 接苹果( dp )
dp dp( x , k ) = max( dp( x - 1 , k - 1 ) + *** , dp( x - 1 , k ) + *** ) *** = 0 or 1 ,根据情况 (BZOJ 1 ...
- BZOJ 3282: Tree( LCT )
LCT.. -------------------------------------------------------------------------------- #include<c ...
- 五张图概括 什么是 ASP 、 ASP.NET (Web Pages,Web Forms ,MVC )
当你看懂下面这五张图,我相信你对于学习.NET Web开发路线将不陌生! 来源: http://www.w3 ...
- Linux 开放服务端口
CentOS 6.5上安装Tomcat 服务器,需要开放服务端口,供其他计算机访问部署在Tomcat中的Web应用.下面是开放端口的方法. 我知道的方法有两种.下面以开放8080端口为例. 方法一:命 ...
- tar 基础
如何安装---> 出门右转百度. 1.基本使用方式 tar [option] desc_file source_file desc_file 表示要生成的打包文件:source_file 表示需 ...