ただし一部のサービスについては変更可能な状態値から解放されたヒープ?

StackOverflow https://stackoverflow.com/questions/817958

質問

F#WikiBook下 封止の変更可能な状態 部にある次のコードスニペット.

> let incr =
    let counter = ref 0
    fun () ->
        counter := !counter + 1
        !counter;;

val incr : (unit -> int)

> incr();;
val it : int = 1

> incr();;
val it : int = 2

> incr();;
val it : int = 3

最初にでも簡単に十分な飲み込み、変更可能な counter 値単位詳細 incr するメソッドが呼び出されます。

も考えてみると少しかわかりませんでしたした場合 counter ですから解放されたヒープをつかさどるさまざまな counter もとは、以前の値前に増加されます。どのように counter 生内 incr 機能範囲生を通して複数の機能電話?

その主な質問:

  • ただし一部のサービスについては counter から解放されたヒープ?
  • counter メモリリーク?
役に立ちましたか?

解決

の違'語彙の範囲が名前が意味を持つテキストのプログラム'lifetime'(実行時間の間がオブジェクトの作成や破壊し)できる場合がありますので、必混乱してしばしばこれら二つの高い相関を示す。しかしその技術実証によりこの例では機能言語:だ実装詳細に小さな語彙の範囲内におい隠すの実施内容から呼び出し側が、寿命の延伸を目指す取り込みによるので閉鎖(その寿命になり、寿命、括弧内のオブジェクトがこのインスタンスの舗'機能)。これはどうなるかという点に集中してい封止機能プログラミング(対照的に、通常の封止技術の公開-非公開にクラスオブジェクト指向プログラミング).

現在、この特定の例のようにな'舗"は、トップレベルの機能、その価値持続期間のプログラム(またはインタラクティブセッションがタイピングへfsi.exe).きのこは"漏洩'より異なりますが、意図するだけでも構いません。いユニークなidカウンターに必要な全体の寿命全体のプログラムでは、今よりもっと店舗とカウンター varable どこかで この間のプログラム。ではこれが"水漏れ"や"よりデザイン機能'によってどのよう'舗'が使用されます(まだ使用する機能の全体のプログラム?).いずれの場合においても、ポイントは、'舗'を有メモリ資源をなしていただけない場合、必要なそれらの資源を永遠に、ライベートレッスンを閉鎖によって参照される'舗へと到達不能な場合は必要ありません。一般的にこれにより地域のその他の機能、例えば

let MyComplicatedFuncThatNeedsALocalCounter args =
    let incr = 
        // as before
    // other code that uses incr
    // return some result that does not capture incr

他のヒント

この場合、 incr トップレベルの機能を実装していstaticフィールドについて知っておきましょせん。) を取り付けることができ閉鎖源への参照があるの細胞名 counter.この閉鎖が存在するの ref 細胞で行われた。

このトップレベルの結合まもなくゴミとして回収では静電気を読み取り専用になります。(C#)まして閉鎖う 限定 寿命(約"や"にちじ"で現在オブジェクト) ref 細胞解き放たれた時の閉鎖はゴミを収集します。

カウンターから解放されたエディタで開き、ヒープの場合舗はない。なメモリリークがガベージコレクション

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top