【发布时间】:2019-06-24 18:32:49
【问题描述】:
我正在抄袭《我的世界》,我正在使用一个结构来存储物品,只是这样:
typedef struct Item {
union {
struct {
int V:4;
int Q:6;
int ID;
} BItem;
struct {
union {
struct {
int V:4;
int Q:6;
int ID;
} BItem;
struct {
int *Ench;
double Durability;
char *Name;
int ID;
} TItem;
} Item[4][8];
enum {
ICBItem,
ICTItem
} Type;
} CItem;
struct {
int *Ench;
double Durability;
char *Name;
int ID;
} TItem;
} ItemUnion;
enum {
BItem,
CTtem,
TItem
} Type;
void *UseHandler;
} Item;
我对此使用 sizeof,得到 1024 个字节。只是这不应该占用这么多内存。有人可以解释吗?我觉得这非常令人沮丧,我想将它作为数字存储到一个文件中,使用 memcpy 以某种方式将结构转换为 int,但是没有 intager 足够大以容纳大型结构。
【问题讨论】:
-
看看
Item[4][8]。那是该数组中的 32 个元素。从它的元素你得到两个指针,一个双精度和一个整数。你可能会在那里得到一些填充字节。将所有这些乘以 32,您就会得到“巨大”。这都是正常的。 -
@DeiDei 哦让我试试看
-
除了上面的答案,这样组成结构正常吗?它似乎不可维护且难以推理。为什么不将其分解为易于管理的小单元?
-
@DeiDei 等等。这实际上是有道理的
-
BItem中的位域毫无意义;在整体类型的每一种情况下,BItem是union-ed 反对更大的东西:TItem包含两个指针,double和int。