如何控制或优化或删除或释放 UNION 中未使用的内存

How to control or optimize or remove or deallocate unused memory in UNION's

这个问题是关于如何控制或优化或删除或释放联合中未使用的内存?我们知道联合大小是联合内部去缩放的最大数据类型。假设我声明了 long 类型,然后它分配了 64 字节的内存,但我在程序中只使用了 16 字节。如何优化剩余的48字节内存?

#include<stdio.h>
int main(){
  union data_type {
    unsigned long A;
    unsigned int B;
    unsigned short C;
    unsigned char D;
  };
  union data_type my_union;
  my_union.C = 0X09;
  printf("UNION size:%d\n", sizeof(my_union));
  return 0;
}

您无法优化或删除该内存。如果您像这样使用 union,那将仍然是对 space 的浪费,您对此无能为力。这就是为什么使用 union 创建 "variant" 数据类型被认为是不好的做法的原因之一:你最终会浪费内存。

如果你想在C中进行泛型编程,有几种更好的方法:void指针结合枚举类型信息,或者适应C11的代码_Generic

如果删除成员 A 和 B,则联合的大小将为 unsigned short 的大小,从而最大限度地减少已用内存量。鉴于程序中只使用了成员C,这应该不是问题。

P.S。 %dsize_t 的错误格式说明符。