ソース言語をバイトコードに変換する非常に単純なコンパイラを作成しました。このコードは VM によって処理されます (単純なスタック マシンとして、3 + 3 は次のように変換されます)。
push 3
push 3
add
現在、ガベージコレクションに苦労しています(参照カウントを使用したい)。参照が割り当てられた場合、そのオブジェクトの参照カウンターがインクリメントされ、スコープを離れるとデクリメントされますが、GCが取得したオブジェクトを解放する方法は明確ではありません。関数に渡される...
ここで、私が意味することのより具体的な例をいくつか示します
string a = "im a string" //ok, assignment, refcount + 1 at declare time and - 1 when it leaves scope
print(new Object()) //how is a parameter solved? is the reference incremented before calling the function?
string b = "a" + "b" + "c" //dont know how to solve this, because 2 strings get pushed, then concanated, then the last gets pushed and concanated again, but should the push operation increase the ref count too or what, and where to decrease them then?
誰かが参照カウントを実装するためのチュートリアルへのリンクを提供してくれるか、誰かが以前にこの問題を抱えていた場合にこの非常に具体的な問題を手伝ってくれたらうれしいです (私の問題は、いつ参照をインクリメントするのか、参照をデックするのか、またはカウントがどこにあるのかわからないことです)保存されます)