内存对齐问题

来源:互联网 发布:安全网络平台 编辑:程序博客网 时间:2024/06/06 12:42

关于内存对齐的概念这里不作详细介绍,只给出两篇文章,以备查看。然后介绍内存对齐一般的用处及注意点;

http://blog.csdn.net/sc_valentine21/article/details/2254549 

http://blog.csdn.net/AlwaysSLH/article/details/1843038

 

其中第一篇文章介绍的浅显易懂,但缺少介绍pragma pack的内容。所以第二篇里有此相关内容。

 

 

内存对齐一般的场合:

 

1   当struct里的变量排布的不够合理的时候,会无由的浪费很多内存空间,当你用到的结构体变量非常多时,会浪费大量的内存空间,举例如下:

 

struct {      char a;      int  b;       char  c;       int d;}

在win32系统里,没有设置pragma pack参数时,本应该占用1+4+1+4=10个字节的内存,但由于内存对齐的缘故,会占用16个字节,所以会浪费6个字节,

当此类的结构体过多时,会导致浪费大量的存储空间,比如此类结构体占用100M内存空间,那么会浪费6/16*100M内存。所以在这种情况下,设置pack数位1可以节省内存。

 

2   在网络通信时,当A传输给B一个char型和一个int型变量时,如果B端不注意内存对齐的问题,会导致赋值有问题。

     因为网络通信时A传输给B时是 1+4个字节,如果B按struct来接收的话,会无法匹配正确的内容。所以会有问题。

 

3  总结,反正是再涉及到内存连续读取时,如果不考虑内存对齐的问题,会多读无用的或异常的值,导致失败,比如校验和等

 

刚碰巧看到了Tony Bai 的 关于内存对齐的四篇文章,很不错。这里转下。以备后续查看。

http://bigwhite.blogbus.com/logs/2005/08/1347304.html   在文章的底部有关于其他三篇文章的链接。

 

 

原创粉丝点击