C语言学习迄今为止不懂的例子

例子_1

#include "myself.h"

int main(void) {
    double dx;
    char ca;
    char cx;
    double dz;
    char cb;
    double _Alignas(double) cz;

    printf("char alignment: %zd\n", _Alignof(char));
    printf("double alignment: %zd\n", _Alignof(double));
    printf("double &dx: %p\n", &dx);
    printf("char   &ca: %p\n", &ca);
    printf("char   &cx: %p\n", &cx);
    printf("double &dz: %p\n", &dz);
    printf("char   &cb: %p\n", &cb);
    printf("char   &cz: %p\n", &cz);
    
    return 0;
}

这是输出

char alignment: 1
double alignment: 8
double &dx: 000000d99a9ffc48
char   &ca: 000000d99a9ffc47
char   &cx: 000000d99a9ffc46
double &dz: 000000d99a9ffc38
char   &cb: 000000d99a9ffc34
char   &cz: 000000d99a9ffc28

我已经用_Alignas(double)声明了cz变量,表明这个数据是内存对齐的。但是输出表示,这个cz占用的字节并不是八字节。而bc占用了它的第八个字节。

posted @ 2022-04-21 22:05  Ethan&Young  阅读(64)  评论(0)    收藏  举报