gpt4 book ai didi

对结构和 union 的 sizeof 感到困惑

转载 作者:太空宇宙 更新时间:2023-11-04 02:45:51 24 4
gpt4 key购买 nike

来自某处的问题要求标记此结构部件的大小,我不确定如何通过初始化来判断大小。对答案的任何解释都会有所帮助。如果有帮助,系统是 32 位的。

  • sizeof( struct Artist_A )?
  • sizeof( artist_record )?
  • sizeof( artist_record[1].record )?
  • sizeof( artist_record[1].group )?

    struct Artist_A {
    short group;
    char title[20];
    union Rec{
    void * ptr;
    int num;
    char character;
    double real;
    } record;
    };

    struct Artist_A artist_record[200];

最佳答案

这是您在 GCC 编译器上针对此代码获得的结果,

truct Artist_A {
short group;
char title[20];
union Rec{
void * ptr;
int num;
char character;
double real;
} record;
};

struct Artist_A artist_record[200];
int main(){
/* %zu is used as sizeof() returns std::size_t */
printf("%zu\n",sizeof( struct Artist_A ));
printf("%zu\n",sizeof( artist_record ));
printf("%zu\n",sizeof( artist_record[1].record ));
printf("%zu\n",sizeof( artist_record[1].group ));
}

输出:

32 
6400
8
2

这些是需要的一些字节!

解释:

结构 Artist_A:

  • short group:4为short,虽然short只需要2个字节数据结构对齐就完成了!数据对齐意味着将数据放在等于字大小的某个倍数的内存偏移处。在 32 位系统中,字大小为 4 字节(而在 x64 中为 8 字节)。这实际上提高了性能。

  • char title[20]:取20个字节,即一个字节将char分成20个元素。

  • uinion 记录:根据官方文档,union 的大小只限于容纳其最大数据成员。所以它又增加了 8 个字节。

关于对结构和 union 的 sizeof 感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27495677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com