eva*_*ing 3 c struct memory-alignment
我知道C结构中的成员与他们需要的任何边界对齐.
struct S {
uint8_t ui8;
/* invisible padding here */
uint32_t ui32;
};
Run Code Online (Sandbox Code Playgroud)
我的问题是,struct S是否定义了实例的对齐方式?
struct S my_s;
Run Code Online (Sandbox Code Playgroud)
是否my_s定义了对齐?是否struct S会ui32成为其第一个成员是否重要?
我搜索过但只找到了关于struct member alignment的信息.
是的,它将具有对齐要求,是的,它将取决于成员的类型struct.
C11规范草案说:
完整对象类型具有对齐要求,这些要求对可以分配该类型的对象的地址施加限制.
和:
可以使用
_Alignof表达式查询完整类型的对齐要求 .