Umfangreiche Beispiele für ausführbare Dateien

Beispielszenarios für die Verwendung sehr umfangreich ausführbarer Dateien.

Beispiel für ein Adressraummodell für große Programme

Wenn Ihr bevorzugtes Adressraummodell wie folgt lautet:
  • MAXDATA=0x50000000 (Nicht-DSA)
  • Erforderliche Shmat/mmap-Regionen in den Segmenten 0xB, 0xC und 0xE
  • Text des gemeinsam genutzten Bibliotheksbereichs und Zugriffsmöglichkeit auf vorab verlagerte Daten
Das Adressraumlayout ergibt Folgendes:
   0x0: System Segment
   0x1:
   0x2: Exec-time Private Dependencies / Stack
   0x3: Process Heap
   0x4: Process Heap
   0x5: Process Heap
   0x6: Process Heap
   0x7: Process Heap
   0x8:
   0x9:
   0xA:
   0xB: shmat/mmap (mapped after exec)
   0xC: shmat/mmap (mapped after exec)
   0xD: Shared Library Text
   0xE: shmat/mmap (mapped after exec)
   0xF: Pre-relocated Library Data

Dieses Beispiel zeigt, dass die Segmente 0x8–0xA für die ausführbare Datei verfügbar sind.

Wenn die Größe der ausführbaren Datei größer als 256 MB und kleiner als 512 MB ist, sind die idealen HUGE_EXEC -Einstellungen für diese Situation wie folgt:
  1. HUGE_EXEC=0
  2. HUGE_EXEC=0x8
  3. HUGE_EXEC=0x9

Die Optionen 1 und 2 fügen die ausführbare Datei in die Segmente 0x8–0x9ein, während Option 3 die ausführbare Datei in die Segmente 0x9–0xAeinfügt.

Beispiel für ein sehr großes Programmadressraummodell

Wenn Ihr bevorzugtes Adressraummodell wie folgt lautet:
  • MAXDATA=0x50000000 DSA
  • Erforderliche Shmat/mmap-Regionen in den Segmenten 0xB, 0xC und 0xE
  • Text des gemeinsam genutzten Bibliotheksbereichs und Zugriffsmöglichkeit auf vorab verlagerte Daten
Das Adressraumlayout ergibt Folgendes:
   0x0: System Segment
   0x1:
   0x2: Exec-time Private Dependencies / Stack
   0x3: Process Heap
   0x4:      |
   0x5:      |
   0x6:      v
   0x7: ____________ (data limit)
   0x8:
   0x9:
   0xA:
   0xB: shmat/mmap (mapped after exec)
   0xC: shmat/mmap (mapped after exec)
   0xD: Shared Library Text
   0xE: shmat/mmap (mapped after exec)
   0xF: Pre-relocated Library Data

Daraus ist ersichtlich, dass die Segmente 0x4–0xA für die ausführbare Datei verfügbar sind.

Wenn die Größe der ausführbaren Datei größer als 256 MB und kleiner als 512 MB ist, sind die idealen HUGE_EXEC -Einstellungen für diese Situation wie folgt:
  1. HUGE_EXEC=0x8
  2. HUGE_EXEC=0x9

Option 1 würde die ausführbare Datei in die Segmente 0x8–0x9einfügen, während Option 2 die ausführbare Datei in die Segmente 0x9–0xAeinfügen würde.

Hinweis: Eine HUGE_EXEC=0 -Einstellung wäre für diesen Kunden nicht geeignet, da das System Segmente 0xB–0xC für die ausführbare Datei auswählen würde (wegen DSA). Dies würde verhindern, dass diese Segmente nach der Ausführung für shmat/mmap verfügbar sind. Wenn Sie HUGE_EXEC auf eines der Segmente 0x4, 0x5, 0x6oder 0x7 setzen, während die Einfügung wie angefordert erfolgen kann, würde das Wachstum des Prozesszwischenspeichers auf das Segment direkt unterhalb des angeforderten Startsegments begrenzt.

Beispiel für einen sehr großen Programmadressraum ohne Zugriff auf einen gemeinsam genutzten Bibliotheksbereich

Wenn Ihr bevorzugtes Adressraummodell wie folgt lautet:
  • MAXDATA=0xB0000000 DSA
  • Keine Shmat/mmap-Regionen
  • Keine Zugriffsmöglichkeit auf den gemeinsam genutzten Bibliotheksbereich
Das Adressraumlayout ergibt Folgendes:
   0x0: System Segment
   0x1:
   0x2: Exec-time Private Dependencies / Stack
   0x3: Process Heap
   0x4:      |
   0x5:      |
   0x6:      |
   0x7:      |
   0x8:      |
   0x9:      |
   0xA:      |
   0xB:      |
   0xC:      v
   0xD: ____________ (data limit)
   0xE:
   0xF:

Daraus ist ersichtlich, dass die Segmente 0x4–0xF für die ausführbare Datei verfügbar sind.

Wenn die Größe der ausführbaren Datei größer als 256 MB und kleiner als 512 MB ist, sind die idealen HUGE_EXEC -Einstellungen für diese Situation wie folgt:
  1. HUGE_EXEC=0
  2. HUGE_EXEC=0xE

Beide Optionen fügen die ausführbare Datei in die Segmente 0xE–0xFein.

Hinweis: Wenn ein HUGE_EXEC auf eines der 0x4-0xD -Segmente gesetzt wird und die Einfügung wie angefordert erfolgt, würde das Wachstum des Prozesszwischenspeichers auf das Segment direkt unter dem angeforderten Anfangssegment begrenzt.

Beispiel für ein Standardprozessadressraummodell

Wenn Ihr bevorzugtes Adressraummodell wie folgt lautet:
  • MAXDATA=0 (Nicht-DSA)
  • Keine Shmat/mmap-Regionen
  • Text des gemeinsam genutzten Bibliotheksbereichs und Zugriffsmöglichkeit auf vorab verlagerte Daten
Das Adressraumlayout ergibt Folgendes:
   0x0: System Segment
   0x1:
   0x2: Exec-time Private Dependencies / Process Heap / Stack
   0x3:
   0x4:
   0x5:
   0x6:
   0x7:
   0x8:
   0x9:
   0xA:
   0xB:
   0xC:
   0xD: Shared Library Text
   0xE:
   0xF: Pre-relocated Library Data

Daraus ist ersichtlich, dass die Segmente 0x3–0xC für die ausführbare Datei verfügbar sind.

Wenn die Größe der ausführbaren Datei größer als 256 MB und kleiner als 512 MB ist, sind die idealen HUGE_EXEC -Einstellungen für diese Situation wie folgt:
    1. HUGE_EXEC=0
    2. HUGE_EXEC=0x3
    ...
   10. HUGE_EXEC=0xB

Die Optionen 1 und 2 haben identische Ergebnisse-Einfügen der ausführbaren Datei in die Segmente 0x3–0x4.

shtext_in_one mit einem einzigen Textsegment für gemeinsam genutzten Bibliotheksbereich

Wenn Ihr bevorzugtes Adressraummodell wie folgt lautet:
  • MAXDATA=0x70000000 (Nicht-DSA)
  • In den Segmenten 0xC, 0xD, 0xE und 0xF erforderliche shmat/mmap-Regionen
  • Zugriffsmöglichkeit auf gemeinsam genutzte Bibliotheksbereiche
Das Adressraumlayout ergibt Folgendes:
   0x0: System Segment
   0x1: Shared Library Text
   0x2: Exec-time Private Dependencies / Stack
   0x3: Process Heap
   0x4: Process Heap
   0x5: Process Heap
   0x6: Process Heap
   0x7: Process Heap
   0x8: Process Heap
   0x9: Process Heap
   0xA:
   0xB: 
   0xC: shmat/mmap (mapped after exec)
   0xD: shmat/mmap (mapped after exec)
   0xE: shmat/mmap (mapped after exec)
   0xF: shmat/mmap (mapped after exec)

Daraus ist ersichtlich, dass die Segmente 0xA–0xB für die ausführbare Datei verfügbar sind.

Wenn die Größe der ausführbaren Datei größer als 256 MB und kleiner als 512 MB ist, sind die idealen HUGE_EXEC -Einstellungen für diese Situation wie folgt:
  1. HUGE_EXEC=0,shtext_in_one
  2. HUGE_EXEC=0xA,shtext_in_one

Beide Optionen fügen die ausführbare Datei in die Segmente 0xA–0xB und die gemeinsam genutzte Bibliothek in das Segment 0x1ein.

Hinweis: Wenn Sie für HUGE_EXEC einen Wert von 0xB–0xEfestlegen, die Einfügung jedoch wie angefordert erfolgen kann, wird verhindert, dass einige der Segmente 0xC–0xF nach der ausführbaren Datei für shmat/mmap verfügbar sind.

shtext_in_one mit zwei Textsegmenten des gemeinsam genutzten Bibliotheksbereichs

Wenn Ihr bevorzugtes Adressraummodell wie folgt lautet:
  • MAXDATA=0x70000000 DSA
  • In den Segmenten 0xA und 0xB erforderliche shmat/mmap-Regionen
  • Texteingabehilfen für gemeinsam genutzten Bibliotheksbereich (erstellt mit dem Attribut doubletext32 )
Das Adressraumlayout ergibt Folgendes:
   0x0: System Segment
   0x1: Shared Library Text (primary)
   0x2: Exec-time Private Dependencies / Stack
   0x3: Process Heap
   0x4:      |
   0x5:      |
   0x6:      |
   0x7:      |
   0x8:      v
   0x9: ____________ (data limit)
   0xA: shmat/mmap (mapped after exec)
   0xB: shmat/mmap (mapped after exec)
   0xC: 
   0xD: 
   0xE: 
   0xF: Shared Library Text (secondary)

Daraus ist ersichtlich, dass die Segmente 0xC–0xE für die ausführbare Datei verfügbar sind.

Wenn die Größe der ausführbaren Datei größer als 512 MB und kleiner als 768 MB ist, sind die idealen HUGE_EXEC -Einstellungen für diese Situation wie folgt:
  1. HUGE_EXEC=0,shtext_in_one
  2. HUGE_EXEC=0xC,shtext_in_one

Beide Optionen fügen die ausführbare Datei in die Segmente 0xC–0xE und den gemeinsam genutzten Bibliothekstext in die Segmente 0x1 und 0xFein.

Hinweis: Wenn Sie für HUGE_EXEC einen Wert von 0x4–0x7festlegen, während die Einfügung wie angefordert erfolgen kann, würde dies dazu führen, dass das Heapspeicherwachstum des Prozesses auf das Segment direkt unter dem angeforderten Anfangssegment begrenzt wird.