如何控制或优化或删除或释放 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。 %d
是 size_t
的错误格式说明符。
这个问题是关于如何控制或优化或删除或释放联合中未使用的内存?我们知道联合大小是联合内部去缩放的最大数据类型。假设我声明了 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。 %d
是 size_t
的错误格式说明符。