C++基础--class的大小
在这里列出了空类,类有函数,值,没有函数的大小,注意Class是默认字节对齐
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string>
using namespace std; #include <stdio.h> class x
{ }; class cx
{
public:
cx()
{ }
~cx()
{ }
}; class cxHasVirtual
{
public:
cxHasVirtual()
{ }
virtual ~cxHasVirtual()
{ }
}; class cxHasVirFunc
{
public:
cxHasVirFunc()
{ }
virtual ~cxHasVirFunc()
{ } virtual int setA()
{
int a = ;
} }; class cxHasVal
{
public:
cxHasVal()
{ }
~cxHasVal()
{ }
int a;
char y; }; class cxHasValFunc
{
public:
cxHasValFunc()
{ } ~cxHasValFunc()
{ }
int a;
char y; int getASize()
{
return sizeof(a);
}
void setA()
{
a = ;
}
}; int main()
{
x emptyX;
int emptySize = sizeof(x);
printf("size of empty class is %d\n\n", emptySize); cx *classx = new cx();
int clsizePt = sizeof(classx);
int clsize = sizeof(cx);
printf("size of class point is %d\n", clsizePt);
printf("size of class is %d\n\n", clsize); cxHasVirtual *classVirtual = new cxHasVirtual();
int clsizeVirtualPt = sizeof(classVirtual);
int clsizeVirtual = sizeof(cxHasVirtual);
int clsizeVirFunc = sizeof(cxHasVirFunc);
printf("size of class point has virtual is %d\n", clsizeVirtualPt);
printf("size of class has virtual is %d\n\n", clsizeVirtual);
printf("size of class has virtual destruct and fun is %d\n\n", clsizeVirFunc); cxHasVal *hasVal = new cxHasVal();
hasVal->a = ;
int hasValSize = sizeof(hasVal);
int rVal = sizeof(cxHasVal);
printf("size of class Point has val is %d\n", hasValSize);
printf("size of class has val is %d\n\n", rVal); cxHasValFunc *hasValFunc = new cxHasValFunc();
int hasValFuncSize = sizeof(hasValFunc);
int rValFunc = sizeof(cxHasValFunc);
printf("size of class Point has val is %d\n", hasValFuncSize);
printf("size of class has val Func is %d\n\n", rValFunc); return ;
}
运行结果:
结论:1.空类的大小和含有构造和析构函数的类的大小为1个字节;
2.New的class的大小为指针所占用的内存,为4,与类的大小以及是否含有变量和函数无关;
3. 含有虚函数的类,由于虚函数需要建立一张虚函数表,指针指向虚函数表,而指针的大小为4,所以含有虚函数的类大小增加4个字节;
4. 含有函数和变量的类的大小为变量的大小的集合,这里变量为int和char, 由于字节对齐,大小为8;
5.类的大小与函数无关
C++基础--class的大小的更多相关文章
- C++基础--struct的大小
在修改别人的代码的过程中,发现很多人会把struct和struct的定义混淆,在这里主要是为了提醒自己Struct定义的规范性. #include <stdio.h> struct x{ ...
- (转)CSS字体大小: em与px、pt、百分比之间的对比
CSS样式最混乱的一个方面是应用程序中文本扩展的font-size属性.在CSS中,你可以用四个不同的单位度量来显示在web浏览器中的文本 大小.这四个单位哪一种最适合Web? 这个问题引起了广泛的争 ...
- 【Socket】Java Socket基础编程
Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要讲解Socket的基础编程.Socket用在哪呢,主要用在进程间,网络间通信.本篇比较长,特别做了个目录: 一.Socket通信基 ...
- 【转】Java Socket编程基础及深入讲解
原文:https://www.cnblogs.com/yiwangzhibujian/p/7107785.html#q2.3.3 Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要 ...
- docker 系列 - 基础镜像环境和Docker常用命令整理
=======================docker 基础镜像环境 alpine=======================可以使用 docker search 命令搜索指定的 image, ...
- 【Socket】Java Socket编程基础及深入讲解
Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要讲解Socket的基础编程.Socket用在哪呢,主要用在进程间,网络间通信.本篇比较长,特别做了个目录: 一.Socket通信基 ...
- moviepy音视频剪辑:与大小相关的视频变换函数crop、even_size、margin、resize介绍
☞ ░ 前往老猿Python博文目录 ░ 一.引言 在<moviepy音视频剪辑:moviepy中的剪辑基类Clip详解>介绍了剪辑基类的fl.fl_time.fx方法,在<movi ...
- CSS字体大小: em与px、pt、百分比之间的对比
CSS样式最混乱的一个方面是应用程序中文本扩展的font-size属性.在CSS中,你可以用四个不同的单位度量来显示在web浏览器中的文本大小.这四个单位哪一种最适合Web? 这个问题引起了广泛的 ...
- 【TCP/IP】之Java socket编程API基础
Socket是Java网络编程的基础,深入学习socket对于了解tcp/ip网络通信协议很有帮助, 此文讲解Socket的基础编程.Socket用法:①.主要用在进程间,网络间通信. 文章目录如下: ...
随机推荐
- SELinux 引起的 Docker 启动失败
问题描述 Linux OS 版本 CentOS Linux release 7.2.1511 (Core) 启动Docker service docker start 启动失败信息 原因分析 Erro ...
- vue-cli 启动过项目步骤
一. 安装 node.js 安装完成后,可以命令行工具中输入 node -v 和 npm -v,如果能显示出版本号,就说明安装成功. 二.安装webpack npm install webpack - ...
- 《架构设计之[CAP定理]》读后感
现在有许多互联网项目都是采用分布式结构进行部署.而cap定理是分布式系统中最近出的原则.所以对于哦我们来说,学习cap非常重要.CAP定理又称为布鲁尔定理.CAP定理是指对于一个分布式系统,不能同时满 ...
- 修改linux系统用户、PostgreSQL用户的密码
1. 修改linux系统postgres用户的密码 PostgreSQL会创建一个默认的linux用户postgres,修改该用户密码的方法如下: 步骤一:删除用户postgres的密码 sudo ...
- linux下定时任务的工具crontab的用法
Linux计划任务工具cron用法详解 linux下大名鼎鼎的计划任务工具crontab的使用介绍baidu.google上多得让人眼花缭乱,本着“天下文章一大抄”的觉悟,加上本人日常工作中总结的使用 ...
- Python多线程&进程
一.线程&进程 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程, ...
- Robot Framework自动化测试三(selenium API)
Robot Framework Selenium API 说明: 此文档只是将最常用的UI 操作列出.更多方法请查找selenium2Library 关键字库. 一.浏览器驱动 通过不同的浏览器 ...
- goLang冒泡
// test project main.gopackage main import ( "fmt") func main() { var a = [10]int{1, ...
- Android多渠道打包工具
http://www.cnblogs.com/huangtianhui/archive/2012/07/14/2591382.html 鉴于Android市场众多,基于各种利益考虑,以及未来app能够 ...
- 存储器的保护(一)——《x86汇编语言:从实模式到保护模式》读书笔记18
本文是原书第12章的学习笔记. 说句题外话,这篇博文是补写的,因为让我误删了,可恶的是CSDN的回收站里找不到! 好吧,那就再写一遍,我有坚强的意志.司马迁曰:“文王拘而演<周易>:仲尼厄 ...