C++之类所占内存空间

来源:互联网 发布:网络信息系统 编辑:程序博客网 时间:2024/06/10 00:58

由于类的成员较多,所以很容易将类对象到底占多少内存弄混,所以自己写这篇文章,看下编译器到底给类对象分配多少内存空间。

一、类为空的情况下,对象所占内存空间


运行结果为1。
那为什类对象为空,还会占用内存空间呢?
其实很容易理解,C++要求所有的每个实例在内存中有独一无二的地址,想想也是,如果没有独一无二的地址,那程序怎么找到那个变量呢。
像上例中的对象没有成员,那咋办呢,那编译器就只能给类对象隐式添加一个字节,这样就有了内存地址。

二、只有普通数据成员时,对象所占内存空间

运行结果为4。
当类定义中只有数据成员时,对象所占内存空间为所有数据成员所占空间之和。但是C++标准中要求int型的最小存储位数是16位,也就是2个字节。可是这里对象占4个字节。
感到疑惑,所有又弄了个例子
这回运行结果是16,那就可以这样理解了,类对象中的数据成员一个最少占用4个字节,为什么说最少呢,因为又弄了个例子。
运行结果是28,不管怎样,数据成员所占空间最少为4个字节,如果比4个字节大,那也是4的倍数。这就是对齐原则了。

三、那有了静态数据成员那会怎样呢

运行结果还是28,可见静态数据成员属于类,而不是某一特定对象,也并不存储在某一特定对象中,不占内存空间。

四、加入普通成员函数的类对象

运行结果还是28,所以说普通成员函数是不占内存空间的。


五、接下来会写静态成员函数,虚成员函数,子类对象的内存空间问题

0 0
原创粉丝点击