В целевом проекте C с включенным GC я размещаю массив с переменным размером в стеке так:
MaValue *myStack = alloca((sizeof(id) * someLength));
(причина, по которой я хочу это сделать, не важна :)
Затем, внутри цикла, я нажимаю и вставляю материал в / из myStack. Некоторые вещи, которые я помещаю в стек, - это новые объекты, на которые больше не ссылаются.
Мои интуитивные ощущения говорят мне, что целевой сборщик мусора C не знает об этих указателях и поэтому собирает новые (в противном случае не связанные) объекты. Часть этого убеждения исходит из того, что цель C GC на самом деле не консервативна, а «знает свои указатели» (например, через карту стека).
Однако во всех моих экспериментах (вставляя вызовы [[NSGarbageCollector defaultCollector] collectExhaustively]) я не получал эти объекты для сбора - что хорошо, но неожиданно. Похоже, что GC сканирует весь стек и, например, консервативно предполагает, что целое число, имеющее значение действительного указателя, действительно является указателем.
Это правильно? Или я что-то упустил?