我刚接触结构,正在学习如何找到结构的大小。我知道填充是如何发挥作用的,以便正确地对齐内存。
struct books{
short int number;
char name[3];
}book;
printf("%lu",sizeof(book));最初,我认为短的int会占用2个字节,然后是从第三个内存位置开始的字符数组。然后,字符数组需要3个字节的填充,大小为8。类似这样,其中每个单词表示内存中的一个字节。
短短的字符
字符填充
然而,在运行时,它的大小是6,这让我感到困惑。
如有任何帮助,将不胜感激,谢谢!
发布于 2019-04-09 22:16:34
#include <stdalign.h>
#include <assert.h>结构的大小总是可以被成员的最大对齐整除(必须是2的幂)。如果你有一个带有char和short的结构,对齐是2,因为short的对齐是2,如果你有一个结构,只有在char中它的对齐是1。
有多种方法可以操作对齐方式:
alignas(4) char[4]; // this can hold 32-bit ints这是非标准的,但在大多数编译器(GCC,Clang,...)中都可用:
struct A {
char a;
short b;
};
struct __attribute__((packed)) B {
char a;
short b;
};
static_assert(sizeof(struct A) == 4);
static_assert(alignof(struct A) == 2);
static_assert(sizeof(struct B) == 3);
static_assert(alignof(struct B) == 1);https://stackoverflow.com/questions/55594696
复制相似问题