- /**
- *
- * 改变缺省的对界条件(指定对界)
- * · 使用伪指令#pragma pack (n),C编译器将按照n个字节对齐。
- * · 使用伪指令#pragma pack (),取消自定义字节对齐方式。
- */
- #include <stdio.h>
- #define my_int(n) printf(#n" = %d\n", n)
- /* 默认按结构体中最大成员对齐 */
- typedef struct {
- int a;
- char b;
- char c;
- char d;
- }struct_t1;
- typedef struct {
- char b;
- int a;
- char c;
- char d;
- }struct_t2;
- typedef struct {
- char b;
- double a;
- char c;
- char d;
- }struct_t22;
- #pragma pack(2)
- typedef struct {
- int a;
- char b;
- char c;
- char d
- }struct_t3;
- typedef struct {
- int a;
- char b;
- char c;
- }struct_t4;
- #pragma pack()
-
- int main()
- {
- my_int(sizeof(struct_t1));
- my_int(sizeof(struct_t2));
- my_int(sizeof(struct_t22));
- my_int(sizeof(struct_t3));
- my_int(sizeof(struct_t4));
-
- return 0;
- }
另外,还有如下的一种方式:
· __attribute((aligned (n))),让所作用的结构成员对齐在n字节自然边界上。如果结构中有成员的长度大于n,则按照最大成员的长度来对齐。
· __attribute__ ((packed)),取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐。
以上的n = 1, 2, 4, 8, 16... 第一种方式较为常见。
阅读(1751) | 评论(0) | 转发(0) |