如果尚未创建此结构的对象,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).
};
我在确定结构的大小时遇到了问题。我发现可以在 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).
};