假设我有结构:
typedef struct my_char {
char c;
} my_char_t;
我可以假设任何时候内存地址都会对齐吗?
我想也许是的,因为在教程中我看到了这样的结构:
typedef struct my_char2 {
char c;
int i;
} my_char2_t;
c
和i
之间有填充,所以它似乎假设c
是对齐的
通过普通方式(例如使用定义对象的声明或使用
malloc
分配空间)在 C 中创建的任何对象都将具有 C 实现对该对象要求的对齐方式。
struct my_char { char c; }
的对齐要求通常只是一个字节,因为该结构只包含一个具有一字节对齐要求的成员。结构的对齐要求通常是其成员最严格的对齐要求,因此 struct { char c; }
具有一个字节的要求,而 struct { char c; int i; }
具有与 int
相同的对齐要求,在现代 C 实现中通常为四个字节.