结构的内存大小不同?

Blu*_*lub 3 c memory memory-management

为什么第一种情况下不是12?测试:最新版本的gcc和clang,64位Linux

struct desc
{
    int** parts;
    int nr;
};
Run Code Online (Sandbox Code Playgroud)

sizeof(desc); Output: 16

struct desc
{
    int** parts;
};
Run Code Online (Sandbox Code Playgroud)

sizeof(desc); Output: 8

struct desc
{
    int nr;
};
Run Code Online (Sandbox Code Playgroud)

sizeof(desc); Output: 4

cni*_*tar 7

允许编译器在struct成员之间添加填充以使处理更有效.这种填充因平台,编译器版本等而异.这是使structs网络发送变得不可能的事情之一.

您可以使用它offsetof来找出编译器添加填充的确切位置.

  • 并非不可能:这就是包装的设计目标. (3认同)
  • C标准是不可能的; C标准不包括struct/pragma包装 (3认同)