Есть три C исходных файлов в игре: mempool, foo1, foo2
.
.h
файл (ов) header файлы, описывающие функции, которые выглядят как "и как их следует называть.
При компиляции либо foo1
или foo2
, объект-код из mempool.o
будет статически в них.
Сделав это, они теперь представляют собой «две совершенно отдельные программы», каждая из которых содержит идентичный бит объектного кода.
Когда две программы выполняются, каждая из них будет иметь свою собственную кучу. Хотя оба они содержат один и тот же объектный код, который используется для управления пулом памяти, они не связаны друг с другом.
Если вы используете do, хотите, чтобы программы фактически «обменивались памятью», вы должны использовать именованный раздел общей памяти. (shmget
и т. Д.), и вы должны создать свой менеджер менеджера пула памяти, чтобы находить, открывать и правильно использовать этот общий ресурс. Еще раз, обе программы будут содержать свою собственную независимую копию объектного кода вашего менеджера пула памяти.
(Подсказка:. «это уже сделано» Вы можете найти полные библиотеки, которые делают это, на таких местах, как GitHub, вместо того, чтобы приступать к заказному реализации себя)
=== Дополнительное примечание:
Я также хотел бы прокомментировать, попутно, что третий существует возможность: динамически загружаемых библиотек.
При использовании этого подхода объект-код загружается приложением во время выполнения, а он не становится «частью» объектного кода приложений, которые его используют. Вместо этого он становится доступным для них. Кроме того, операционная система знает об обмене, и может признать недействительным экземпляр, который совместно используется. Он может разрешить общий набор распределений памяти быть «принадлежащим» тому одиночному, совместно используемому экземпляру. Операционные системы (и версии, «исторические против современных» , например MS-Windows ...) различаются в зависимости от конкретной точки.
Слишком широкие, но встроенные системы обычно не имеют стандартной библиотеки, и использование 'malloc' & friends - очень плохая идея. Вот почему один использует пулы памяти ... – Olaf
foo1.c и foo2.c скомпилированы в одну и ту же программу или две отдельные программы? – kkrambo
они индивидуально отдельные программы все вместе. –