为什么sizeof显示8字节?

问题描述 投票:0回答:1

为什么这段代码中sizeof显示8字节?

int 有 4 个字节

char 有 1 个字节

为什么sizeof不显示5字节?

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    struct test
    {
        int num;
        char ch;
    };

    printf("%lu", sizeof(struct test));
    return 0;
}

我以为sizeof显示的是5,但它显示的是8字节

c struct sizeof
1个回答
0
投票

观察:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    struct test
    {
        int num;
        char ch;
    };

    struct test2
    {
        int num;
        char ch;
    } __attribute__((packed));

    printf("%lu\n", sizeof(struct test));
    printf("%lu\n", sizeof(struct test2));
    return 0;
}
stieber@gatekeeper:~ $ gcc Test.c && ./a.out
8
5

第一个版本使用“填充”,因此只需执行

10*sizeof(test)
为 10 个测试结构的数组分配内存之类的事情仍然会提供有效的内存布局。

未对齐的访问效率较低,在某些平台上甚至会导致崩溃。

© www.soinside.com 2019 - 2024. All rights reserved.