关于内存对齐的理解

来源:互联网 发布:什么是java虚拟路径 编辑:程序博客网 时间:2024/05/16 14:02

 有一下几个结构

struct s1
{

--------------------
 char c;
char c2;
short sh;

----------------------
int i;
};

struct s2
{
 char c;
 short sh;

----------------------
 int i;

----------------------
 char c2;
};

(假设编译器开启 内存对齐 选项,且机器的内存对齐为4字节),则sizeof操作结构如下

sizeof(s1) = 8;

sizeof(s2) = 12;

在32位机器上的一般为4字节对齐,上面结构中的分割线为内存对齐处(4字节对齐)。

关于内存对齐的好处:就是加快cpu的访问速度。cpu读取内存是按块读取(32位机为4字节)

加如没有内存对齐,那么当数据位于块读取分割处,就要读取2次,例如上面的s2若没有内存对齐,int i 占据

4 5 6 7,cpu读取1234 然后读取5678才能获取完整的int i

字节 1  2  3  4 | 5  6  7  8 | 9 10 11 12 | 13 14 15 16 |

------------------------------------------------------------------------------------------------------------------------------------------

vc中可以使用#pragma pack来设置内存对齐大小,如下设置内存对齐大小为1字节

#pragma pack(1)
struct s3

{
    char c1;
    short s;
    char c2;
    int i;
};
#pragma pack()

原创粉丝点击