Как реализовать подсчет ссылок в C?

читайте об этом здесь.

Мне нужно реализовать разновидность такого интерфейса, скажем, у нас есть большой объем памяти для управления, должны быть функции getmem(size) и free(указатель на блок), которые должны убедиться, что free(указатель на блок) действительно может освободить память тогда и только тогда, когда все процессы, использующие этот блок, выполняются с его использованием.

Я думал о том, чтобы определить структуру Collectableкак указатель на блок, его размер и количество процессов, использующих его. затем всякий раз, когда процесс использует экземпляр структуры Collectableв первый раз, он должен явно увеличивать счетчик, и всякий раз, когда процесс free()использует его, счетчик уменьшается.

Проблема с этим подходом заключается в том, что все процессы должны реагировать на этот интерфейс и заставлять его явно работать: всякий раз, когда присваивается собираемый указатель экземпляру, процесс должен явно включать этот счетчик, что меня не удовлетворяет, я подумал, может быть, есть способ создать макрос, чтобы это происходило неявно при каждом назначении?

Я некоторое время ищу способы решения этой проблемы, поэтому другие подходы и идеи были бы замечательными...

РЕДАКТИРОВАТЬ: приведенный выше подход не удовлетворяет меня не только потому, что он не Это выглядит красиво, но в основном потому, что я не могу предположить, что код работающего процесса позаботится об обновлении моего счетчика.Мне нужен способ убедиться, что это сделано без изменения кода процесса...

8
задан Cœur 25 February 2017 в 14:09
поделиться