gpt4 book ai didi

c++ - union U在内存中是什么样子的?

转载 作者:太空狗 更新时间:2023-10-29 21:30:50 25 4
gpt4 key购买 nike

enum Enums { k1, k2, k3, k4 };

union MYUnion {
struct U{
char P;
}u;

struct U0 {
char state;
} u0;

struct U1 {
Enums e;
char c;
int v1;
} u1;

struct U2 {
Enums e;
char c;
int v1;
int v2;
} u2;

struct U3 {
Enums e;
unsigned int i;
char c;
} u3;

struct U4 {
Enums e;
unsigned int i;
char c;
int v1;
} u4;

struct U5 {
Enums e;
unsigned int i;
char c;
int v1;
int v2;
} u5;
} myUnion

我对 C++ 中 Union 的整个概念感到很困惑。这个“myUnion”在内存中是什么样子的?我知道数据共享同一个内存块,但是如何呢?尺寸是多少“我的联盟”?如果是“u5”的大小那么这 block 内存中的数据是如何分配的??

最佳答案

  1. union 的大小是 union 中最大的东西的大小。
  2. 并集的布局是您上次存储的任何内容。

因此,在您的最后一个 union 中,如果您存储到 .i,然后存储到 .e,则 int 的第一个字节将被枚举值覆盖(假设 sizeof (enum) 在您的环境中为 1)。

union 就像:

void * p = malloc(sizeof(biggest_item))
Enums *ep = (Enums *)e;
unsigned int * ip = (unsigned int *)p;
char *cp = (char *)p;

*ep*ip*cp 的赋值就像 union 一样。

关于c++ - union U在内存中是什么样子的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1777574/

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