如果内存中没有分配此结构的对象,sizeof怎么确定结构的大小?

问题描述 投票:0回答:2

我通过确定结构的大小遇到了一个问题。我发现,尽管在内存中没有为各个结构分配对象,但是可以在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-operation内部使用struct关键字确定结构的大小为什么有效,甚至可能?

或者已经在内存中分配了struct1对象,我不知道吗?

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

c memory data-structures struct sizeof
2个回答
2
投票

sizeof必须能够确定不同类型的大小,否则当您需要时将不知道要分配多少空间。

struct定义指示将要使用多少空间。

一种分配可能是这样的:

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

总计:40个字节


1
投票

除了可变长度数组(目前可能还没有想到的其他一些边缘情况),sizeof不需要需要类型的实例来确定其大小,它可以工作只是基于类型定义本身。

在您给出的情况下(如下所示),实际上它只是从类型定义中知道对象的大小(每个单独字段的大小加上每个字段之间以及最后一个字段之后对齐所需的填充) )-评论提供了一种可能性:

struct struct1 {
    char a[20];  // 20 bytes @ 0.
    int v,i;     // Two 4-byte values @ 20 (a multiple of 4).
                 // 4 bytes padding to align next 8-byte double.
    double grw;  // 8 bytes @ 32 (a multiple of 8).
};
© www.soinside.com 2019 - 2024. All rights reserved.