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 何为伪类? 也就是实际实现了类的效果,但是并没有实际添加到标签中的类, ...
随机推荐
- jvm slot复用
如果当前字节码PC计数器的值已经超出了某个变量的作用域,那这个变量对应的Slot就可以交给其他变量使用. 字节码PC计数器就是程序计数器,程序计数器记录当前线程所执行的字节码的偏移地址.如果这个值超出 ...
- java打印树形目录结构
import java.io.File; public class MainTest { public static void main(String[] args) { String dirname ...
- Arduino-原理图标识
VCC 电源正极 VDD GNG 电源负极 VSS vin 表示输入电源 TXD RXD 是主板串口通信用的接口,TXD表示发送数据,RXD表示接收数据,还有简 ...
- CSS盒子模型与怪异盒模型
盒子模型(Box Modle)可以用来对元素进行布局,包括内边距,边框,外边距,和实际内容这几个部分. 盒子模型分为两种 第一种是W3c标准的盒子模型(标准盒模型) .第二种IE标准 ...
- CF F. Royal Questions kruskal
每一个 $A$ 必须和指定的唯一的 $B$ 匹配,转化成图论关系就是 $A$ 和 $B$ 之间有若干条连边,每个边有一个边权,而该边权只能代表一对 $A,B$. 这其实就是一个基环树的结构. 所以只需 ...
- 约数定理(two)
筛约数个数和 理论基础: 1.对n质因数分解,n=p1^k1 * p2^k2 * p3^k3 …… 则n的约数个数为(k1+1)*(k2+1)*(k3+1)…… 2.线性筛素数时,用i和素数pj来筛掉 ...
- Altera培训SignalTap II的使用--笔记
培训的内容有点多(啰嗦)(笔记为截图) 听课笔记:Altera培训SignalTap II的使用--笔记
- 《SQL Server 2012 T-SQL基础》读书笔记 - 9.事务和并发
Chapter 9 Transactions and Concurrency SQL Server默认会把每个单独的语句作为一个事务,也就是会自动在每个语句最后提交事务(可以设置IMPLICIT_TR ...
- mui初级入门教程(四)— 再谈webview,从小白变“大神”!
文章来源:小青年原创发布时间:2016-06-05关键词:mui,html5+,webview转载需标注本文原始地址: http://zhaomenghuan.github.io/#!/blog/20 ...
- foreach(增强for循环)和for的区别
https://www.cnblogs.com/XiaojianGo/p/7471860.html 首先说一下foreach有的也叫增强for循环,foreach其实是for循环的一个特殊简化版. 再 ...