GCが有効になっているObjectiveCプロジェクトでは、次のようにスタックに可変サイズの配列を割り当てています。
MaValue *myStack = alloca((sizeof(id) * someLength));
(これを実行する理由は重要ではありません:)次に、ループ内で、myStackにデータをプッシュおよびポップします。私がスタックにプッシュするもののいくつかは、他のどこからも参照されていない新しいオブジェクトです。
私の直感は、Objective Cのガベージコレクターがそれらのポインターについて知らないため、新しい(そうでなければ参照されていない)オブジェクトを収集することを示しています。その信念の一部は、Objective C GCは実際には保守的ではなく、「そのポインタを知っている」(たとえば、スタックマップを通じて)という考えに由来しています。
ただし、すべての実験([[NSGarbageCollector defaultCollector] collectExhaustively]呼び出しを挿入)では、これらのオブジェクトを収集できませんでした。これは良いことですが、予期しないことです。したがって、GCはスタック全体をスキャンしているようであり、たとえば、有効なポインターの値を持つ整数が実際にはポインターであると控えめに想定しています。
あれは正しいですか?それとも私は何かが足りないのですか?