C++ 中的内存问题

来源:互联网 发布:古力娜扎长相知乎 编辑:程序博客网 时间:2024/06/09 23:09

一直以来学习C++都没能在内存上多加注意,总以为自己能够写出些能运行的代码就可以了,殊不知这些基础知识的缺失才是以后提高自己能力最大的障碍。之前面试的时候也是在内存的使用上丢了不少分。

先说说C++中几个重要的数据结构:struct、union和enum;

有两篇不错的文章讲述了这几个结构的异同:http://www.cnblogs.com/ggjucheng/archive/2011/12/13/2287009.html

http://blog.sina.com.cn/s/blog_74a459380101avvb.html

struct占用空间的计算需要考虑内存对齐,内存对齐指的就是同一个结构体中存储的数据是分块存储的,每一块的大小是当前结构体数据中最大的那一个所占内存,例如定义

struct  test{bool s1;int s2;bool s3;}test a;
其中最大的为int 型,占4个字节,则前面和后面的bool型虽然只占用1个字节,但是在存储的时候会占用4字节;因此 a占用的字节空间为 12字节;

struct test2{bool s1;bool s2;int s3;}test2 b;
前面的两个bool型占不满4个字节,后面的int型占用4个字节;因此b占用的字节空间为8字节;

而联合体union则不需要考虑内存对齐,union中的数据存储空间按照联合体中的最大数据类型来算,

union test3{int s1;double s2;};test3 c;
c的大小为8;

而枚举enum则只有在赋值的时候数据才会占用空间,大小为4个字节。

0 0