如果尚未创建此结构的对象,sizeof 如何确定内存中结构的确切大小?

How can sizeof determine the exact size of a structure im memory if no object of this structure has been created?

我在确定结构的大小时遇到​​了问题。我发现可以在 sizeof 操作中使用前置关键字 struct 来确定结构的大小,尽管还没有为相应的结构创建对象:

示例:

#include <stdio.h>

int main()
{
   struct struct1
   {
        char a[20];
        int v,i;
        double grw;
   };

   printf("Size of struct1 in Byte: %lu",sizeof(struct struct1));

   return 0;
}

输出:

Size of struct1 in Byte: 40

这怎么可能?

如果尚未创建结构的对象,sizeof 如何借助 sizeof 操作中的 struct 关键字确定结构的大小?

或者已经创建了一个struct1对象,我不知道吗?

我认为结构只是一种数据类型,而不是其自身类型的对象。

sizeof 需要能够确定不同类型的大小,否则当您确实需要时它不知道要分配多少 space。

struct 定义表示要使用多少 space。

一个分配可能是这样的:

  • char a[20]: 20 字节。
  • int c, i: 每个 16 位,所以 4 个字节。
  • double grw: 128bit, 16 bytes.

总计:40 字节

除了变长数组,sizeof不需要类型的实例来计算它的大小,它可以根据类型计算出来定义本身。

在你给出的情况下(如下所示),它实际上知道,仅从该类型定义,对象将有多大(每个单独字段的大小加上每个字段之间和之后对齐所需的任何填充)最后一个字段)-评论给出了一种可能性:

struct struct1 {
    char a[20];  // 20 bytes @ 0.
    int v,i;     // Two 4-byte values @ 20 (a multiple of 4, so already aligned).
                 // 4 bytes padding to align next 8-byte double.
    double grw;  // 8 bytes @ 32 (a multiple of 8, aligned due to padding above).
};