C++ 中的内存问题

一直以来学习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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值