【发布时间】:2021-01-14 03:30:48
【问题描述】:
假设我有以下结构:
typedef struct MyObject {
char* tag;
union {
BigObject b; // imagine this is 5MB
SmallObject s; // imagine this is 8 bytes
} u;
}
来自标准(复制自this answer):
...联合的大小足以包含其最大的数据成员。每个数据成员的分配就像它是结构的唯一成员一样。
有没有办法让特定结构的确切大小达到malloc?类似于tag* (8) + padding (?) + [small or big object size] (?)。换句话说,考虑到正确的union-ed 对象大小,我怎样才能得到相当于MyObject o; sizeof(o) 的值?
【问题讨论】:
-
这有XY 问题的味道。如果您解释您要解决的问题会更好,因为这是错误的方法。
-
@dxiv 这是一个概念性问题。这就是为什么我让一个成员5MB......
-
你可以照你说的做——使用
sizeof(MyObject) -
@M.M 当我只需要这么多字节时,我只想分配 16 个字节——当然,这是一个概念性问题,我只是想看看这种类型的东西在 C 中是否可行不可能。
-
@samuelbrody1249 这里的概念是您不能以任何安全或可移植的方式“切片”这样的结构。如果你想在 C 中模拟继承,还有其他不使用标记联合的方法。