Получить все существующие указатели на объект

Можно ли получить список указателей на указатели на объект c.

что-то вроде

id **pointers(id object, int *out_count)

Довольно сумасшедший, да? знак равно


person Denis Mikhaylov    schedule 22.12.2011    source источник
comment
ты прав... это безумие..!!   -  person Saurabh Passolia    schedule 22.12.2011
comment
Возможно, вы получите более точные ответы, если сообщите нам, что вы пытаетесь сделать. В этой форме я думаю, что ответ нет, по крайней мере, без некоторой поддержки со стороны компилятора и без сканирования всей памяти процесса (и фильтрации ложных срабатываний). Кстати, почему функция возвращает указатель на id? Тип id обычно используется напрямую и я не вижу смысла возвращать объект из счетной функции.   -  person zoul    schedule 22.12.2011
comment
@zoul: id * - это тип указателя на массив идентификаторов C, поэтому прототип функции имеет смысл ...   -  person CRD    schedule 22.12.2011
comment
Ах я вижу. Я не знал, что он также охотится за указателями.   -  person zoul    schedule 22.12.2011
comment
@CRD: это не имеет смысла. Все элементы массива будут одинаковыми, а именно идентификатор, который вы передали. Вам нужен массив указателей на ids, т.е. id**   -  person JeremyP    schedule 22.12.2011
comment
твое право! первый вариант какой id** но потом я его без причины поменял ) описание функции в порядке!   -  person Denis Mikhaylov    schedule 22.12.2011
comment
в этом нет никакой необходимости) мне просто интересно   -  person Denis Mikhaylov    schedule 22.12.2011


Ответы (1)


К сожалению нет. Если бы такое вообще было возможно, то написать точный сборщик мусора было бы довольно просто:

int count;
pointers(obj, &count);
if (count == 0) {
    free(obj);
}

Поскольку сборщику мусора target-c приходится отбирать указатели от корней, управлять распределителем и консервативно сканировать стек, чтобы добиться чего-то подобного, я думаю, разумно предположить, что вам нужно сделать то же самое.

Однако можно было бы использовать реализацию этого сборщика мусора, если он работает в режиме GC. Плохая идея, не простая и не будет работать на iOS, но возможно. libauto, в конце концов, с открытым исходным кодом.

person Catfish_Man    schedule 22.12.2011
comment
Сборщик мусора использует поддержку компилятора для подсчета количества указателей (кучи), указывающих на некоторый объект. Он действительно считает только указатели стека и регистра. Но инструмент для утечек делает что-то подобное (сканирует всю кучу на наличие указателей). Так что, возможно, стоит изучить это. - person Nikolai Ruhe; 22.12.2011
comment
На самом деле это то, что ARC делает. Он удерживает объект в памяти, пока существует хотя бы один указатель. - person Denis Mikhaylov; 22.12.2011
comment
@Денис Михайлов: И ARC, и сборщик мусора зависят от компилятора для подсчета ссылок на объекты. - person Nikolai Ruhe; 22.12.2011
comment
Этот гипотетический сборщик мусора не будет собирать циклы. - person R. Martinho Fernandes; 23.03.2012