1

Pythonこの質問は、変数ストレージのメモリ管理手法に触発されています。C言語で同様の機能を実装したいと考えています。

一般に、大規模な実行中のプログラムのほとんどの変数には、値01. datatype の 100 個の変数がint0またはを持っていると仮定すると、メモリのバイトを1使用しています。100 * sizeof(int) = 400代わりに、参照カウントを使用して各変数を次の構造体にポイントすることができます。これにより、メモリ使用量が数バイトに削減されます。参照カウントが に達すると、構造体の割り当てが解除されます0

struct var
{
    int value;
    int refCount;
}

私が達成したいのは、複数intの を定義すると、リンクされたリストは次のようになるということです。

void foo()
{
    int a = 0, b = 0, c = 0;
    int i = 1, j = 1;
    int x = 7;
    int p = 5, q = 5;
}

結果は次のリンクリストになります

[Head] <-> [0,3] <-> [1,2] <-> [7,1] <-> [5,2] <-> [Tail]

ここaで、ノードbcポイントします[0,3]iノードなどをj指します[1,2]。さて、変数のメモリ割り当てをオーバーライドCし、上記のように独自のアルゴリズムを実装するにはどうすればよいでしょうか? C++そのような機能はありますか?

更新: 変更するa = 9と、新しいノードが として作成され[9,1]、前のノードは に変更され[0,2]ます。参照カウントが に達する0と、割り当てが解除されます。

4

2 に答える 2

0

データの性質がわからない場合は、説明したように、特定の方法でデータを動的に割り当てるアルゴリズムを作成する必要があります。

または、コンパイル時のデータの性質を知っていれば、好みの方法でデータを割り当てることができます。プログラムが実行時に、コンパイル時にそれ自体に必要な割り当てを計算することは意味がないため、「Cが変数を割り当てる方法をオーバーライドする」ことは意味がありません。

これを実現する最良の方法は、おそらくCコードを生成するスクリプトを用意することです。

于 2013-01-09T07:47:56.047 に答える
0

これは自分で実装する必要があり、透過的ではありません。変数はintもはや s ではなく、何かへのポインターになります。

また、あなたの例では、 を変更するとa、も変更されることに注意してください。bc

于 2013-01-09T07:24:46.247 に答える