_Expand versus new versus GNU

8

Vor kurzem habe ich einen neuen Freund gefunden. Sein Name ist _expand , und wir hatten einige nette Gespräche, und ich habe sogar aufgehängt mit ihm ein paar Mal aus. Aber als ich anfing herumzufragen, hatte noch nie jemand von meiner Expand gehört. Ich wurde misstrauisch. Ich habe ein paar gründlich nicht metaphorische Freunde bei Microsoft und ein paar Freunde an anderer Stelle im Geschäft angerufen. Nichts. Niemand hatte es jemals benutzt. Ich ruderte um verschiedene Suchmaschinen und Quellbäume herum. Nichts als eine oberflächliche Erwähnung hier und da. Sicherlich nicht genug Informationen über Leistung und Kompatibilität für mich, _expand in Produktionscode oder genauer, generische Bibliotheken einzuführen.

Schlimmer noch, es gibt keine äquivalente Funktion, die ich in einer der GNU-Bibliotheken finden kann, also wird alles, was ich mit meinem neuen Freund hacke, nicht im Geringsten portierbar sein. Was ist eine Schande, weil es wirklich eine faszinierende und aufregende Fähigkeit zu haben ist. Sicher, ich könnte in Realloc graben und auseinander ziehen, wie es funktioniert, aber das Problem dort ist, dass ein Großteil der Implementierung auf * nixes höchst variabel ist. Also müsste ich Version für Version codieren, um zu versuchen, ein tragbares _expand zu bekommen. Dennoch erscheint es lächerlich, dass nichts Ähnliches in den glib oder den erweiterten Gnu-Bibliotheken existiert.

  1. Gibt es eine ähnliche Funktion, die ich für Linux-Hacking kennen sollte? Meist beantwortet
  2. Gibt es einen Standard-Hook, auf dem ich eine ähnliche Funktion aufbauen könnte? Beantwortet
  3. Weiß jemand, welche Art von Leistung _expand bietet?
  4. Wie interagiert es mit Objekten, die auf dem LFH zugeordnet sind?

Um meine Interessen zu verdeutlichen, versuche ich, einen einfach verknüpften Akkumulator zu bauen, der erweitert wird, um die Fragmentierung zu minimieren, während Blöcke mit mehreren Elementen entlang der traditionellen Deque-Implementierung verteilt werden. Durch die Einschränkung der Anwendungsfälle für das Hinzufügen und Löschen von Elementen hoffe ich, die zu löschende Zeit für die gesamte Struktur sowie die Elementeinfügung und Indexierung zu optimieren. Der "laute Fehler" von _expand lässt mich die Struktur darüber nachdenken, wann und ob und in welcher Größe sie sich verändern kann und was das bedeutet, wo sie Daten ablegen kann.

    
Jake Kurzer 06.12.2010, 02:06
quelle

1 Antwort

3

Dass C ++ mit new und delete ohne jegliches Äquivalent von realloc auskommt, zeigt, wie wenig Aufmerksamkeit diese Dinge bekommen. Überraschend _expand wird weitgehend ignoriert, wenn es auf OS-Ebene nicht immer verfügbar ist. Wenn Sie Ihre eigenen rollen möchten, gibt es viele Präzedenzfälle für benutzerdefinierte Versionen von malloc, und ein kurzer Blick in /usr/include/malloc.h auf meiner Linux-Box zeigt Hooks explizit für diese ...

%Vor%

Sieht nicht so aus, als könnten Sie die vorhandene realloc -Implementierung an diesem bestimmten Entscheidungspunkt abfangen oder leicht herausfinden, ob sich die Größe an Ort und Stelle ändert, also müssen Sie möglicherweise alles neu implementieren (oder anpassen) vieler vorhandener Heap-Implementierungen).

    
Tony Delroy 06.12.2010, 04:51
quelle

Tags und Links