[C++基础]内存对齐(字节对齐,结构体对齐)

源码:

#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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值