10億の「外観」を保存する必要があります。メモリ使用量とパフォーマンスの両方に関してこれらを格納する最も効率的な方法を探しています。最低限のメモリ使用量と最高のパフォーマンス
struct Appearance<'a> {
identity: &'a u64,
role: &'a str
}
struct AnotherAppearance<'a>((&'a u64, &'a str));
fn main() {
let thing = 42;
let hair_color = "hair color";
let a1 = Appearance {identity: &thing, role: &hair_color};
let a2 = AnotherAppearance((&thing, &hair_color));
let a3 = (&thing, &hair_color);
}
このような構造で作業するためのより良い方法があります。でa1, a2, a3
ため、これらの点で、例えば、違いは何ですか?また、a1, a2, a3
に関する詳細情報を取得する方法がありますので、それらが自分のためにメモリにどのように表現されているかを確認できますか?
ブリリアントではないので、私はロールのルックアップキーとしてu16を使用することもできます。理論的には、u64は "Keeper of Identities"に所有されていて、コード内でこの動作が反映されると思いました。私は、Appearanceが独自のu64を所有している場合、Keeperが認識していないインスタンスが作成された場合、コンパイラは不平を言うことはないとのトレードオフがあると思いますか?あなたが&u64のために「遅い」と言うと、どれくらい遅く話していますか? –
@LarsRönnbäck:私はどれほど遅いのかは分かりませんが、値を調べたり使用したりするためには、デフレクションを実行してメモリ内の他の場所を見る必要があります。物事をローカルに保つことは、キャッシュ・スラッシングを減らすことを意味します。ほぼすべてのperf関連の質問と同様に、それはあなたの特定の状況に依存します。 –