编译器的对齐方式

xiaoxiao2021-02-28  43

#include <stdio.h> //用来指定结构体(联合)中对齐的字节数,即按多少字节对齐,如果不指定,则结构体按照最大的数据成员的长度进行对齐, //如果指定了,为n,若n大于等于结构体中最大数据成员的长度,则n无效,按照最大数据长度对齐,若n小于最大数据成员长度 //则按照n个字节进行对齐,及数据成员长度大于等于n的成员,地址必须是n的整数倍,长度小于n的无限制 //注意,此预编译指令只对结构体(联合)数据成员有效,对外部的数据类型无效,详见36-39行 #pragma pack(2) typedef struct test { char a; int b; short c; }Test; typedef struct test2 { char a; }Test2; int main() { Test temp; char * p = (char *)&temp.a; printf("p = %p\n", p); p = (char*)&temp.b; printf("p = %p\n", p); p = (char *)&temp.c; printf("p = %p\n", p); printf("struct size is %d\n", sizeof(Test)); printf("struct2 size is %d \n", sizeof(Test2)); char j, k; double a = 12, b = 213.123, c = 2131.123; int i; printf(" p = %p\n", &j); printf(" p = %p\n", &k); printf(" p = %p\n", &a); printf(" p = %p\n", &b); printf(" p = %p\n", &c); printf(" p = %p\n", &i); }
转载请注明原文地址: https://www.6miu.com/read-2627658.html

最新回复(0)