Ich habe viel Code in einer gemeinsam genutzten ELF-Bibliothek, die nur während der Initialisierung der Bibliothek verwendet wird (sie wird von statischen Initialisierern aufgerufen). Wenn ich diesen Code in einen eigenen Abschnitt (oder vielleicht in den Abschnitt .init) einfügen kann, was ich mit __attribute__((section(".mysection")))
tun kann, gibt es eine Möglichkeit, diesen Abschnitt auszulagern, nachdem die Bibliothek geladen wurde?
Diese Frage ist verwandt, aber die Schlussfolgerung dort war, dass der Kernel Wenn nicht genügend Speicher vorhanden ist, werden nicht verwendete Seiten ausgedruckt, so dass dies nicht explizit erforderlich ist. Ich arbeite jedoch in einer Embedded-Umgebung, in der der Arbeitsspeicher knapp ist und die Kosten für das Auslagern von Code von der Festplatte (ein langsames USB-Flash-Laufwerk) hoch ist. Daher würde ich diesen Code lieber explizit löschen, von dem ich weiß, dass er nie wieder verwendet werden wird, anstatt dass der Kernel sich dazu entscheidet, anderen Code zu löschen, der eventuell zurückgesendet werden müsste.
Ich erinnere mich sicher daran, dass ich über einen Systemaufruf gelesen habe, um den Kernel zu bitten, bestimmte Bereiche des Speichers ein- oder auszublenden, obwohl ich nirgends einen Verweis darauf finden kann, also habe ich mir das vielleicht vorgestellt. Gibt es so etwas?
Suchen Sie nach Dokumentation für Elf-Overlays. Ordnen Sie Ihren Code so an, dass Sie ein Overlay für die Initialisierung und ein weiteres für die Verarbeitung haben. Sie können auch ein Overlay zum Herunterfahren betrachten. Code in Overlays sollte ersetzt werden, wenn das nächste Overlay aufgerufen wird.
Tags und Links linux memory-management elf