Feste Speicherreservierung von X Byte



  • Hallo,
    habe mal eine frage, bezüglich Speicherreservierung.
    Wie ist es möglich eine bestimmte Byteanzahl an Speicher zu reservieren?
    Ich möchte beispielsweise 512Byte Speicher für eine Variable reservieren. Ist es möglich? Wenn ja bitte ein beispiel.

    MfG
    Dima



  • unsigned char  buffer[ 512 ];           // statisch auf dem Stack.
    unsigned char *buffer = malloc( 512 );  // dynamisch auf dem Heap.
    

    greetz, Swordfish

    PS: bei dynamischer Speicherreservierung das Aufräumen mit free( ) nicht vergessen!



  • Swordfish schrieb:

    unsigned char  buffer[ 512 ];           // statisch auf dem Stack.
    

    auf dem 'stack' aber nur innerhalb von funktionen. sonst 'statisch im bss segment'.
    🙂



  • speicher-freak schrieb:

    auf dem 'stack' aber nur innerhalb von funktionen. sonst 'statisch im bss segment'. 🙂

    Nein, immer auf dem Stack, denn Globals sind phöse 😉

    greetz, Swordfish



  • Danke für die schnellen antworten 🙂



  • Swordfish schrieb:

    Nein, immer auf dem Stack, denn Globals sind phöse 😉

    und was ist mit 'static'? das ist auch voll schlecht, ne?
    🙂



  • Schluss mit dem Unsinn. Ob Datensegment oder Stacksegment ist doch völlig unerheblich. C gibt dir sowieso keine garantie, was das betrifft.

    greetz, Swordfish



  • Swordfish schrieb:

    unsigned char  buffer[ 512 ];           // statisch auf dem Stack.
    unsigned char *buffer = malloc( 512 );  // dynamisch auf dem Heap.
    

    greetz, Swordfish

    PS: bei dynamischer Speicherreservierung das Aufräumen mit free( ) nicht vergessen!

    Gibt es noch andere Möglichkeiten mit int und ohne Arrays?

    MfG
    Dima



  • Weshalb willst Du kein Array? Naja, dann bleiben nur noch dynamische Varianten wie

    int *buffer = malloc( 512 / sizeof( int ) ); // wenn's unbedingt 512 Bytes integer *) sein müssen
    

    oder eine verkettete Liste.

    greetz, Swordfish

    PS: Wofür brauchst du denn genau 512 Bytes?
    PPS: Hört sich an wie 20 dag Wiener 😉



  • Dima schrieb:

    Gibt es noch andere Möglichkeiten mit int und ohne Arrays?

    du willst ein breiteres 'int' als 'int'? was hast du vor?
    🙂



  • Swordfish schrieb:

    int *buffer = malloc( 512 / sizeof( int ) ); // wenn's unbedingt 512 Bytes integer *) sein müssen
    

    nicht / sondern *
    🙂



  • void DateiKopieren(string& inf, string& outf)
    {
    	unsigned char  buffer[512];
    	int f;
       fstream infile, outfile;
    	infile.open(inf.c_str(), ios::in | ios::binary);
       outfile.open(outf.c_str(),ios::out | ios:: binary);
       while(infile.read((char*)&f, sizeof(*buffer)))
    		outfile.write((char*)&f, sizeof(*buffer));
       infile.close();
       outfile.close();
    
    }
    

    Noch eine Frage zum Quelltext oben.
    Als Übung soll ein kleines programm geschrieben werden, dass eine beliebige Datei in 512Byte Häppchen kopieren soll. Bloß wie Überprüft man so etwas? Wird jetzt die angegebene Datei in 512 Byte Blöcken kopiert??? Oder wie kann man es anders gestallten?
    MfG
    Dima



  • ... sizeof(*buffer)
    

    ich wette das sternchen muss da weg. ansonsten biste mit dem code falsch hier. lass die eine etage tiefer, ins frickelforum, verschieben.
    🙂


Anmelden zum Antworten