4

このサイトで見つけたすべての質問はStackvsのみを参照しHeapており、説明はしていませんFrame。ここに私の質問があります。3つすべての違いを理解しないでください。

私が知っていること:

Frame:Aframeは、関数のインスタンス変数の黒板のようなものです。関数の実行中、すべてのインスタンス変数はframeその関数の内部に格納されます。関数が呼び出されると、その frame上に作成されstackます。

Stack:Aはの物理としてstack視覚化できます。メソッド(または関数)が実行されると、からメモリのチャンクが割り当てられます。stackframesstack

Heap:すべてのオブジェクトポインタはに存在しheapます。

スタックとフレームは明確です(私は思います)が、私は私のHeap声明に正しいですか?

4

3 に答える 3

2

ヒープ: すべてのオブジェクト ポインターはヒープ上に存在します。

スタックとフレームは明確です (私は思います) が、私のヒープ ステートメントは正しいですか?

そうではありません。ほとんどの(*)動的に割り当てられたオブジェクトはヒープ上に存在し、それらのオブジェクトへのポインターは他のオブジェクト(または変数、それらは本質的に同じもの)に存在します-スタックまたはヒープ上にある可能性があります。この「オブジェクト」と「オブジェクトへのポインター」の区別は、Objective-C では重要であり (すべての言語でそうであるとは限りません)、すべての「オブジェクト ポインターがヒープ上に存在する」と言うのは正しくありません。

(*) 動的オブジェクトをスタックに割り当てることが可能であり、場合によっては非常に便利であるため、「ほとんど」です。これは、Objective-C オブジェクトでは実行できませんが、C オブジェクトでは実行できます (C は Objective-C の一部です)。これについてはまだ気にしないでください。この脚注は、ここで説明されているモデルが簡略化されていることを示すために役立ちます。

于 2012-04-14T11:08:58.607 に答える
0

はい。ヒープは、動的メモリ用の非連続スペースです。

于 2012-04-14T09:57:32.847 に答える
0

@CRDの答えに基づいて...

ヒープについて考える別の方法は、その名前が示すように、乱雑な山です。ヒープに投げ込まれたオブジェクトに戻る方法を見つけるのに役立つポインターが必要です。

于 2012-07-23T02:04:05.057 に答える