Wie dynamischen Speicher reservieren?



  • Jo genau ...
    wer mein vorherigen Thread kennt, weiss dass ich n file in ein 'Array' einlese und so ne Datei ist ja bekanntl nicht immer gleich gross 🙂

    Also einfach am Ende des Daten Segments eine Variable
    "Array db ? "
    erstellen und lustig hinaus ins blaue auf den Speicher schreiben?

    Wird mir wohl nix anderes übrig bleiben als selbst auf Kollisionen zu achten oder?

    Gibts dafuer vielleicht ein best Konzept? Trick 17?
    Was zB wenn ich 2, 3 oder noch mehr Speicherstellen mit unbekannter Groesse brauche?



  • Die Funktionen 48h,49h,4Ah des int 21h regeln die Speicherverteilung von DOS im RealMode. 🙂



  • array DB ?

    is wirklich net so empfehlenswert. WENN du das schon so machst, dann bitte so:

    array DB 8192 Dup(?)

    (8192 ist die größe des reservierten speichers)

    cu todo



  • Naja das war eben das Problem .. ich kann zur compile zeit ja nicht wissen wie gross das File sein wird das der user oeffnet oder 🙂



  • du könntest auch mit

    array DB 65536-$ Dup(?)

    den ganzen rest in dem seg. allokieren und dann selber eine eig. speicherverw.-routine schreiben, die den speicher dynamisch zuteilt.

    cu todo



  • Wenn ein DOS Programm startet, dann weist DOS ihn im Prinzip erst einmal allen verfügbaren konventionellen Speicher zu. Ich hab öfters mit TASM bei kleineren COM Projekten Variablen ans Ende gepackt:

    ; ...
    
    mybuffer DB 2000 dup (?)
    
    end start
    

    Solange diese Variablen nicht initialisiert sind, wird das Programm selbst auch dadurch nicht größer. Du kannst auch bei einer EXE einfach ein komplettes nicht initialisiertes Segment deklarieren:

    emuseg segment use16
    org 0
            emu_data DB 0fffeh dup (?)
    emuseg ends
    

    (aus meinem Brainfuck Interpreter für DOS)



  • (aus meinem Brainfuck Interpreter für DOS)

    Heißt das nicht Brainf*ck... 😉 😃



  • hmm ja ein extrasegment dafuer ...warum bin ich da nich selbst drauf kommen 🙂
    THX
    ...


Anmelden zum Antworten