【发布时间】:2018-06-23 22:47:33
【问题描述】:
我想在 Rust 中实现这个使用 flexible array member(有时称为 the struct hack)的 C 代码:
struct test {
int key;
int dataSize;
int data[];
};
struct test* t = malloc(sizeof(struct test) + sizeOfData)
结构末尾的空数组允许您一次分配所有元字段和数据。不幸的是,我不知道如何在 Rust 中做这样的事情。
【问题讨论】:
-
我认为你可以在每晚使用分配器 API 和相当数量的
unsafe来实现这一点。但我对它在 C 中的工作方式还不够熟悉。如果data数组的对齐大于标头的大小怎么办——是在sizeof中计算的填充字节,还是我们只是依靠malloc分配超出了满足最大可能对齐的必要部分? -
@MatthieuM。可能是我的错,因为你无法避免像我说的那样填充字节,sizeof 和 offsetof 必须为 FAM 产生相同的大小。