您的位置:首页 > 编程语言 > C语言/C++

C语言中字节对齐问题

2017-09-26 23:19 239 查看
以前设计结构体时,都是随性定义子成员,没有考虑字节对齐对内存空间的影响。现在从事的是嵌入式开发,对设备的内存空间利用要求非常严格,经常一不小心Code量就超出芯片容量,所以平时如果自己养成好的习惯,注意字节对齐,可以节省好多空间。

#include <stdlib.h>
#include <stdio.h>
#include <stddef.h>

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

int main(void)
{
struct ALIGN2 ex;
ex.b = 0;
ex.a = 1;
ex.c = 2;

printf("the num is %d\r\n",offsetof(struct ALIGN2 ,a));
printf("the num is %d\r\n",offsetof(struct ALIGN2 ,b));
printf("the num is %d\r\n",offsetof(struct ALIGN2 ,c));

return 0;
}


之前不明白为什么ALIGN2占用八个字节,通过调试发现的确是占用八个字节,查阅书籍,《C和指针》有说明,所有的结构起始存储位置必须是结构中边界要求最严格的数据类型,例子中第一个是int(认为机器的整型值是4个字节),后续必须也按四个对其,虽然后面的是两个char类型,只占用两个字节,但是依然按照四个来对其,所以占用八个字节。

如果定义成

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


这个结构体将占用12个字节,前面的定义只占用8个字节,整整节省了1/3的空间。在编码时多注意细节,才能写出高效的代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言