私は最近 Rust について多くのことを読みましたが、まだ酸化し始めたばかりです。私の脳はほとんどの C/C++ 反射神経を保持しているため、Rust での処理方法が原因でこの質問が関係ない場合はご容赦ください。
一般に、任意のサイズのブロックをヒープに割り当ててから、メモリの小さなチャンクの所有権を取得するバインディングを使用してデータ構造をその上にマップすることは可能ですか (望ましいですか?)。
C99 を使用すると、次のように記述できます。
typedef unsigned char BYTE;
typedef struct {
size_t size;
BYTE payload[];
} flex;
// ...
flex * flex_new(size_t _size) {
flex *f = malloc(sizeof(flex) + _size * sizeof(BYTE));
f->size = _size;
return f;
}
可変長の配列は、可変サイズのチャンクでメモリ プールを実装する場合や、スレッド専用のヒープにメモリを割り当てる場合などに役立ちます。必要なサイズが実行時にしか分からないデータ構造は、「アトミック」な方法で割り当てられ、そのメンバーは連続してパックされます。
同様の Rust の実装が (unsafe
構成要素なしで) 可能かどうか、可能であればどのように見えるか疑問に思っています。たぶん、コンパイラは定義でライフタイム指定子を使用していくつかの情報を推測するかもしれませstruct
んか?