您的位置:首页 > 运维架构 > Linux

unix/linux 字节对齐补齐

2016-02-25 09:26 399 查看
/*
* aligned.c
*
*  Created on: 2016-2-24
*      Author: xfhu
*/

#include <stdio.h>

/*
* 设置属性packed,使1字节对齐补齐,因此sizeof(C)=10,没有未使用的内存空余
*/
typedef struct A{
char a;
double b;
char c;
}__attribute__((packed)) A;

/*
* 该操作系统默认使用4字节对齐方式,总共为sizeof(B)=16字节因此内存使用为:
* 第1字节     :存放a
* 第2~4字节       :因为字节对其,未使用
* 第5~12字节  :存放b
* 第13字节        :存放c
* 第14~16字节 :因为字节对其,未使用
*/
typedef struct B{
char a;
double b;
char c;
}B;

/*
* 预处理指令,使1字节对齐补齐,因此sizeof(C)=10,没有未使用的内存空余
*/
#pragma pack(1)
typedef struct C{
char a;
double b;
char c;
}C;

/*
* 恢复默认对齐补齐方式
*/
#pragma pack()
typedef struct D{
char a;
double b;
char c;
}D;

/*
* 设置内部字节对齐补齐,即如果E 不足32字节,则因为对齐补齐,会分配32字节,以至于E是32字节对齐补齐。
*/
typedef struct E{
char a;
double b;
char c;
}__attribute__((aligned(32))) E;

int main(int argc,char** argv){
printf("sizeof char=%d\n",sizeof(char));
printf("sizeof double=%d\n",sizeof(double));
printf("sizeof int=%d\n",sizeof(int));
printf("sizeof A=%d\n",sizeof(A)); // 10
printf("sizeof B=%d\n",sizeof(B)); // 16
printf("sizeof C=%d\n",sizeof(C)); // 10
printf("sizeof D=%d\n",sizeof(D)); // 16
printf("sizeof E=%d\n",sizeof(E)); // 32
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: