Es gibt drei C-Quelldateien im Spiel: mempool, foo1, foo2
.
Die .h
Datei (en) sind Header Dateien, die beschreiben, wie die Funktionen "aussehen" und wie sie heißen.
Beim Kompilieren entweder foo1
oder foo2
, wird das Objekt-Code aus mempool.o
sein statisch in ihnen verknüpft.
Damit sind sie jetzt "zwei völlig getrennte Programme", die beide ein identisches Bit an Objektcode enthalten.
Wenn die beiden Programme ausgeführt werden, hat jeder von ihnen seinen eigenen privaten Heap. Obwohl beide denselben Objektcode enthalten, der für die Speicherpoolverwaltung verwendet wird, sind sie nicht miteinander verknüpft.
Wenn Sie tun möchten, dass die Programme tatsächlich "Speicher freigeben", müssen Sie ein benanntes Shared-Memory-Segment verwenden. (shmget
, etc ...), und Sie müssen Ihren Memory-Pool-Manager-Code entwerfen, um diese freigegebene Ressource zu finden, zu öffnen und ordnungsgemäß zu verwenden. Beide Programme enthalten wieder eine eigene unabhängige Kopie des Objektcodes Ihres Speicherpool-Managers.
(Hinweis:. „dies bereits getan worden ist“ können Sie komplette Bibliotheken finden, die dies tun, auf Orte wie GitHub, stattdessen auf eine maßgeschneiderte Implementierung einsteigen, sich selbst)
=== Zusätzlicher Hinweis:
ich auch kommentieren, nebenbei möchte, dass eine dritte Möglichkeit besteht: dynamisch geladen Bibliotheken.
Wenn Sie diesen Ansatz verwenden, wird der Objektcode von der Anwendung zur Laufzeit geladen, und wird nicht "" wird "Teil des" Objekt-Code der Anwendungen, die es verwenden. Stattdessen wird es für sie zugänglich. Darüber hinaus ist das Betriebssystem der Freigabe bekannt, und es kann eine einzige Instanz erkennen, die freigegeben wird. Es kann ermöglichen eine gemeinsame Menge von Speicherzuweisungen zu "im Besitz von" dieser einzelnen, geteilten Instanz. Betriebssysteme (und Versionen, "historische vs. heute" z. B. MS-Windows ...) variieren in diesem speziellen Punkt.
Zu breit, aber eingebettete Systeme haben normalerweise nicht die Standardbibliothek zur Verfügung und die Verwendung von 'malloc' & friends ist eine sehr schlechte Idee. Das ist der Grund, warum man Speicherpools verwendet ... – Olaf
Sind foo1.c und foo2.c in dasselbe Programm oder zwei separate Programme kompiliert? – kkrambo
Sie sind alle einzeln getrennte Programme. –