0

NSThread をデタッチすると、Cocoa はそれを別のメモリ ヒープまたはメモリ ゾーンで実行しますか? たとえば、スレッドをデタッチし、malloc を使用して大きなバッファーを作成し、スレッドを終了させた場合、何らかの自動スレッド クリーンアップでそのメモリを取り戻すか、それともリークするでしょうか?

代わりに POSIX スレッド (pthread) を使用するとどうなりますか?

私は ObjC の割り当てや自動解放プールには興味がないことに注意してください。たとえば、int * foo = malloc(100000); などの低レベルのバッファーについて話しているのです。

4

1 に答える 1

6

pthread のような NSThread は、別のスタックを持ちますが、タスク内の残りのスレッドと同じヒープを共有します。個々のタスクのスレッドとヒープは分離されています。

あなたが説明するパターン -- スレッドに割り当て、スレッドを終了させる -- はリークします。記憶は回復しません。

糸の種類は問いません。

サイズの割り当てが非常に制限されている場合は、スレッドの終了時に取得されるスタック バッファーを使用できます。ただし、スレッドのスタック サイズは限られているため、大量のスタック割り当てに依存している場合、スタックを吹き飛ばしてアプリケーション全体をクラッシュさせるのは非常に簡単です。

完了したら、malloc() と free() を使用します。

于 2009-09-25T06:22:28.833 に答える