2012-03-12 11 views
3

可変長サイズの構造体ヘッダーをDプログラミング言語で作成することを検討しています。 "C"では、長さがゼロまたは空のブラケット配列を最後の項目は固定構造体ヘッダー内で宣言され、その後、これらの宣言によって参照される最初の要素のデータ構造の可変サイズ部分によって必要とされる追加の記憶域を含むようにMallocを呼び出します。可変サイズの配列の固定構造体ヘッダーを作成する方法

しかし、D言語では、配列はより高度なオブジェクトです。構造化されたOpcode文字列を構築しようとしているので、最後の項目として後続のメモリ参照を持つ複合構造体を表現したい(Dプログラミング言語を使用した場合どのように宣言が/複合可変長メモリ構造と/仕事を作成するん..

を、以下の配列の最初の要素は?

答えて

6

それはあなたのようにまったく同じ方法でです〜であろうか

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の寸法の静的配列は許可されるが、いかなるスペースがそれのために 割り当てられていません。これは、可変長の最後のメンバとして有用です。 struct、またはテンプレート展開の縮退の場合です。

+0

@Peter Li:Dの静的な配列と動的な配列の区別に注意してください。メモリレイアウトの観点からは、静的配列はCとほぼ同じです。動的配列は "高度なオブジェクト"あなたは参照してください。 – BCS