0

start-pointers と interior-pointers の違いと、どのような状況でどちらかを優先する必要がありますか?

4

2 に答える 2

5

完全な推測として、「開始ポインター」はmallocまたはによって返されるポインターnew[]であり、「内部ポインター」は割り当ての中央へのポインターです。

その場合、重要な違いはfree、内部ポインターではなく、開始ポインターが必要であるということです。

ただし、これは標準の用語ではありません。「内部ポインター」は通常、より大きなメモリブロックへのポインターを意味し、残りは推測/推測します。したがって、おそらくコンテキストを提供する必要があります。質問はどの本/コース/インタビューからのものですか?

于 2012-06-26T11:50:26.153 に答える
0

Steve Jessop の答えは、start-pointer が malloc() などによって返されるポインターであるという正しい答えだと思います。interior-pointers は、その割り当て内の場所へのポインターです。彼の答えを改善することはできませんが、それを拡張します。

例として、リンクされたリストとして、いくつかの構造体の数千のインスタンスが必要になる場合があります。必要に応じて構造体 (またはクラス) に対して malloc() を呼び出す代わりに、malloc() を 1 回だけ呼び出して、数千のインスタンスに十分な数を割り当てます。次に、フリー リスト (フリー インスタンスのリンク リスト) を作成します。フリーリストと使用リストの間でインスタンスを移動 (ポインターリンクを調整して移動) することで、使用と解放を行うことができます。次に、プログラムが構造体のインスタンスを必要としなくなったら、最初に malloc() によって返された開始ポインターで free() を呼び出します。

ここで、.NET Windows の Windows および C++ プログラミングのコンテキストで interior-pointer の別の定義に出くわしました: http://www.codeproject.com/Articles/8901/An-overview-of-interior-pointers-in-C -CLI .

C++ / .NET では、interior-pointer は、CLI ヒープ内のメモリ、つまり .NET のマネージド メモリへのポインタを意味することもあります。しかし、基本的には同じ考えのように思えます。.NET のマネージ メモリで C++ と C を使用する場合、free() を呼び出して割り当てを解除することは決してないため、スターター ポインターには関心がないと思います。.NET がガベージ コレクションを実行します。

于 2013-03-29T19:37:03.820 に答える