您的位置:首页 > 其它

struct中的字节对齐问题

2015-11-19 21:01 369 查看

原因:CPU为了快速的存取内存从而存在内存问题

分析方法:

有例子1

[code]#include <stdio.h>
struct A{
    char a2;
    char a3;
    char a;
    short i;
};
int main(int argc, const char *argv[])
{
    struct A aa = {0x1, 0x2, 0x3, 0x5555};
    char *p = &aa;
    int i;

    printf("sizeof(struct A) = %d\n", sizeof(aa));
    for (i = 0; i < sizeof(aa); i++)
    {
        printf("%#x ", *p);
        p++;
    }
    putchar(10);

    return 0;
}


执行结果是:

sizeof(struct A) = 6

0x1 0x2 0x3 0 0x55 0x55

例子2

[code]#include <stdio.h>
struct A{
    short b;
    char a;
    int c;
};
int main(int argc, const char *argv[])
{
    char array[100] = {0x0,0x0,0,0,0,0,0,0,0};
    struct A *aa = (struct A *)array;
    aa->b = 0x1122;
    aa->a = 0x33;
    aa->c = 0x01223344;
    int i;

    printf("sizeof(struct A) = %d\n", sizeof(struct A));
    for (i = 0; i < sizeof(struct A); i++)
    {
        printf("%#2x ", array[i]);
    }
    putchar(10);

    return 0;
}


执行结果是:

sizeof(struct A) = 8

0x22 0x11 0x33 0 0x44 0x33 0x22 0x1

如果结构体是这种:

[code]struct A{
    char a;    //这两个位置互换
    short b;    //至两个位置互换
    int c;
};


sizeof(struct A) = 8

0x33 0 0x22 0x11 0x44 0x33 0x22 0x1

结论/方法:

当一个结构体中有不同的数据时,在 linux 中遵循 1,2,4的对齐方式,注意没有 8

结构体中的占字节数最多的元素决定二维容器的宽度

一栏里边总是对齐1,2,4原则里的最大的

图形表示:

在程序一和程序二中内存的情况是:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: