读书人

内存储器对齐(字节对齐结构体对齐)

发布时间: 2012-11-03 10:57:43 作者: rapoo

内存对齐(字节对齐,结构体对齐)

源码:

#include <stdio.h>struct stcTest1{    int a;    char b;    int c;};struct stcTest2{    char a;    int b;    char c;};struct stcTest3{    int a;    char b[9];    int c;};int main(){    stcTest1 t1;    stcTest2 t2;    stcTest3 t3;    int a;    int c;    char b;    char b2[9];    printf("-----------stcTest1-------------\n");    printf("stcTest1:   %d\n",sizeof(stcTest1));    printf("stcTest1:   %d\n",&t1);    printf("stcTest1 next:   %d\n",(&t1)+1);    printf("stcTest1.a: %d\n",&t1.a);    printf("stcTest1.b: %d\n",&t1.b);    printf("stcTest1.c: %d\n",&t1.c);    printf("-----------stcTest2-------------\n");    printf("stcTest2:   %d\n",sizeof(stcTest2));    printf("stcTest2:   %d\n",&t2);    printf("stcTest2 next:   %d\n",&t2+1);    printf("stcTest2.a: %d\n",&t2.a);    printf("stcTest2.b: %d\n",&t2.b);    printf("stcTest2.c: %d\n",&t2.c);    printf("-----------stcTest3-------------\n");    printf("stcTest3:   %d\n",sizeof(stcTest3));    printf("stcTest3:   %d\n",&t3);    printf("stcTest3 next:   %d\n",&t3+1);    printf("stcTest3.a: %d\n",&t3.a);    printf("stcTest3.b: %d\n",&t3.b);    printf("stcTest3.c: %d\n",&t3.c);    printf("------------------------\n");     printf("a:   %d\n",&a);    printf("c:   %d\n",&c);    printf("b:   %d\n",&b);    printf("b2:  %d\n",b2);    printf("b2len: %d\n",sizeof(b2));    getchar();    return 0;}


结果:

内存储器对齐(字节对齐,结构体对齐)

分析:20=4+4*3+4;4*3>9

想知道下一个地址:&t1+1,sizeof(t1)=((&t1+1)-(&t1))/4 &t1:表示地址编号

1楼skyandcode昨天 19:09
学习了,第二个结构体是12,还以为是8.n结构体内的变量存入内存时是以定义的顺序的,考虑到内存对齐,所以输出的是12.

读书人网 >编程

热点推荐