首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2012-11-03 
内存对齐(字节对齐,结构体对齐)源码:#include stdio.hstruct stcTest1{int achar bint c}struct stc

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

源码:

#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.

热点排行