码迷,mamicode.com
首页 > 编程语言 > 详细

关于C/C++的字节对齐

时间:2015-02-28 22:59:55      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:

为什么要字节对齐呢?这要从计算机的结构说起,我们知道,在C/C++中定义的变量有单字节(char),双字节(short),四字节(int,float),八字节(long),但是CPU并不一个字节一个字节来读取处理的(8位单片机除外哈),目前常见的CPU都是32位甚至64位,这意味着CPU一次要读取4个字节或者8个字节,并且不能从任意地址开始读取,只能从地址是4或8的倍数地方开始。所以,要是一个int型数据正好被4或8的倍数分成两块呢,那CPU只能分两次来读,效率当然降低了,而如果浪费点内存,把char和int都放到4或8的倍数的地址上,那么CPU就能节省一些读取的时间而提高效率,这就是所谓的字节对齐。废话不说,上代码:

#include <iostream>
using namespace std;

struct MyStruct
{
  double d1;
  char c1;
  int i1;
};

int main()
{
  cout<<sizeof(MyStruct)<<endl;
}

这是一段简单的C++关于结构体的代码,程序的输出结果是多少呢?double是8字节,char是1字节,int是4字节,那么结果应该是8+1+4=13,至少教材是这么说的,呵呵。但是实际运行结果是16,编译器把double放到对齐的8个字节中,而char占4个对齐的字节,int占4个对齐的字节,这就是16个字节。

4字节 4字节 4字节
double d1 char c1 int i1

关于C/C++的字节对齐

标签:

原文地址:http://www.cnblogs.com/lishuai0214/p/4306265.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!