如何为可变大小的数组创建固定的结构体头部

3
我希望您能够在D编程语言中为可变大小的数组创建固定大小的结构体头。在"C"中,人们会将零长度或空括号数组放置在固定结构体头中最后一个声明的项目中,然后调整对Malloc的调用,以包括数据结构可变大小部分所需的额外存储空间,其第一个元素将被此最后一个声明引用。
但是,在D语言中,数组是一个更高级的对象。因为我尝试构建一组结构化的操作码字符串,我真的想要表达一个复合结构体,其尾部内存引用作为其最后一个项目(随后的数组的第一个元素)。
当使用D编程语言时,如何声明/创建/处理复合可变长度内存结构?
1个回答

6

这与在C中的做法完全相同

struct VarArray(T){
uint length;
T[0] t;

static VarArray!T* allocate(T)(uint length){
VarArray!T* ret = enforce(malloc((VarArray!T).sizeof+T.sizeof*length));
*ret.length=length;
return ret;
}

}

请查看http://dlang.org/arrays.html#static-arrays

允许声明一个维度为0的静态数组,但不会为其分配空间。这在变长结构体中作为最后一个成员非常有用,也可作为模板扩展的退化情况。


@Peter Li:顺便提一下,在D语言中,静态数组和动态数组之间有区别。从内存布局的角度来看,静态数组几乎与C语言中的数组完全相同,而动态数组则是你所提到的“更高级的对象”。 - BCS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接