c++中关于类的长度的猜想
在无意中,我偶然发现了类的长度并不是由函数的类型及个数决定,也并非是2的倍数、4的倍数。
在翻阅资料中,我得出了一些我认为可能的猜想。
我们先来看一串代码
#include<iostream>
using namespace std;
class A
{
int a;
};
class B
{
double b;
};
class C
{
int a;
double b;
};
int main()
{
cout<<"A:"<<sizeof(A)<<" B:"<<sizeof(B)<<" C:"<<sizeof(C);
return ;
}
可以看到class C的成员就是class A成员与classB成员的集合,我们来运行一下看看各个class的长度。

可见,class C的长度不等于class A+class B的长度。
这涉及到内存的储存方式。
通过各种研究,我认为内存储存的形式是以"矩形"的方式储存的。
(因不同书写顺序而有不同的分配空间方式)
这就可以解释为什么class C的长度为什么要多出4个字节了。
当一个int类型的数据与一个double类型的数据相遇时,其内存空间无法形成一个矩形,所以会额外分配给int类型4个字节。
如果写两个int类型的话就可以与double组成一个矩形,这样就不用担心空间分配过多问题。
#include<iostream>
using namespace std;
class A
{
int a;
int c;
double b;
};
int main()
{
cout<<"A:"<<sizeof(A);
return ;
}
显示结果:

总结:类的空间大小是由数据的类型及个数决定的,其储存空间总为一个”矩形“。
c++中关于类的长度的猜想的更多相关文章
- 《python解释器源码剖析》第13章--python虚拟机中的类机制
13.0 序 这一章我们就来看看python中类是怎么实现的,我们知道C不是一个面向对象语言,而python却是一个面向对象的语言,那么在python的底层,是如何使用C来支持python实现面向对象 ...
- Java中String类的方法及说明
String : 字符串类型 一. String sc_sub = new String(c,3,2); // String sb_copy = new String(sb) ...
- Python3.x中bytes类型和str类型深入分析
Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和b ...
- object-c中的类目,延展,协议
协议 协议只有方法的声明(类似于其他编程语言的接口) 协议相当于大家都所遵循的 关键字 @protocol 协议名 <所遵循的协议> 默认NSObject @end @pr ...
- JDK6与JDK7中String类subString()方法的区别
1.subString()方法的作用 subString(int beginIndex, int endIndex)方法的返回的是以beginIndex开始到 endIndex-1结束的某个调用字符串 ...
- java中String类学习
java中String类的相关操作如下: (1)初始化:例如,String s = “abc”; (2)length:返回字符串的长度. (3)charAT:字符操作,按照索引值获得字符串中的指定字符 ...
- c++中string类的详解
,<时返回-1,==时返回0 string的子串:string substr(int pos = 0,int n = npos) const;//返回pos开始的n个字符组成的字符串strin ...
- 标准C++中string类的用法
转自博客园:http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html 相信使用过MFC编程的朋友对CString这个类的印象应该非 ...
- CSS中伪类的使用
原文:http://www.cnblogs.com/guopei/archive/2011/04/16/2017627.html 何为伪类? 也就是实际实现了类的效果,但是并没有实际添加到标签中的类, ...
随机推荐
- set -xv
1.set -x 或set xtrace 会显示+以及脚本中的内容(执行的部分,没执行的不显示) set -xv(脚本中所有的内容都显示,包括没执行的部分) 2.debug=3 //多层级调试 t ...
- memcpy函数的用法以及实现一个memcpy函数
memcpy的用法 在项目中经常用到memcpy来实现内存的拷贝工作,如下代码片段 memcpy( pData, m_pSaveData_C, iSize * sizeof( unsigned sho ...
- Mybatis SQL 使用JAVA 静态资源
常量:${@com.htsc.backtest.component.Global@PAGE_SIZE} 静态方法:${@com.htsc.backtest.component.Global@doMet ...
- LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set(线性基,贪心)
LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set $ solution: $ 这一题的重点在于优先级问题,我们应该先保证总和最大,然后再保证某一个最小.于是我 ...
- Python---面向对象---修学校
一.创建北京和成都两个校区: 1.创建Linux\Python两个课程 2.创建北京校区的Python 3期课程和成都校区的Linux 1期课程 3.管理员创建了北京校区的学员小张,并将其分配在了Py ...
- 【NOIP2012模拟8.20】Memory
题目 话说某一天,CD在爬树的时候发现了树干上有一大串奇怪的符文,于是好奇的CD就从头到尾看了一遍.看完一遍以后CD觉得,最后一段文字好像很眼熟,好像在前面见过.对于CD来说,一开始看到的符文会印象特 ...
- 《转》tensorflow学习笔记
from http://m.blog.csdn.net/shengshengwang/article/details/75235860 1. RNN结构 解析: (1)one to one表示单输入单 ...
- 解决git 命令出现end问题
当使用git branch -r是当分支有很多的时候出现end 使用:q可以退出
- [window] Pyhton轻便好用的spyder IDE如何去除E501 line too long提示
spyder 使用pep8作为代码规范的标准,默认单行长度是89个字符以内. 作为一个完美控,在使用spyer有的进行coding时,每当看到以下这个小小的warning时,心情都不是很爽: 89个字 ...
- 用idea搭建SSM框架maven项目
打开idea,点击New - Project 找到Maven一栏,因为要搭建的SpringMvc项目,所以选择webapp模板 填写好GroupId和ArtifactId后,一步步next,最后fin ...