Anzeige:
Ergebnis 1 bis 4 von 4

Thema: Korrektes Speicherhandling

  1. #1
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    04.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609

    Korrektes Speicherhandling

    Also ich hab zur übung (Morgen ist Test) ein kleines C Programm geschrieben.
    Es implementiert UPN mit ner Liste als Stack. Dazu wird in push() ein neues Element angelegt und der Liste hinzugefügt.

    Wenn das Anlegen nicht funktioniert liefert malloc doch NULL zurück. Meine Frage: wie kann ich Testen ob das Speicherhandling richtig funktioniert?
    Also ich will absichtlich die situation schaffen das mein Prog nicht genügend Speicher zur verfügung hat, wie geht das?

    Mit ulimit (-m und -v) kann ich zwar begrenzen, aber es ist eintweder zu viel begrenzt (nichtmal ein weiteres ulimit funktioniert mehr) oder ich hab zu viel Speicher...

    Gibt's dafür denn kein komfortables Tool bzw. kann man in ddd (bzw. gdb) irgendwie sagen: jetzt gibt's keinen weiteren Heap für dich!
    Das Schätzen mit ulimit ist etwas mühsam...


    DANKE für eure Hilfe!
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

  2. #2
    Registrierter Benutzer
    Registriert seit
    08.11.2002
    Ort
    Hennef
    Beiträge
    106
    hallo,

    beschränke doch einfach die Anzahl
    der malloc Aufrufe.
    z.b
    Code:
    void *speicher(...)
    {
    static int count=0;
     
    if(count<10)
    return malloc(.....);
    else
    return NULL
    }
    gruß

  3. #3
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477

    Re: Korrektes Speicherhandling

    Original geschrieben von panzi

    Also ich will absichtlich die situation schaffen das mein Prog nicht genügend Speicher zur verfügung hat, wie geht das?
    Das geht eigentlich echt nur über ulimit.

    Denn wenn da unter Linux das malloc keine Speicher mehr bekommt, weil im ganzen System keiner mehr zu haben ist, killt der Kernel das Programm ohnehin.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  4. #4
    Registrierter Benutzer
    Registriert seit
    08.11.2002
    Ort
    Hennef
    Beiträge
    106
    hallo,

    wenn schon ulimit dann nicht vergessen
    ob Soft- oder Hard limit. (-H oder -S)
    Wenn du ulimit nicht mitgibst was du für ein Limit gesetzt haben willst
    setzt es beide Hard und Soft Limit auf den gewünchten Wert
    der kleiner sein muß als der aktuelle Hard limit Wert.
    Der normale User kann das Hard limit nur runtersetzen
    Nur root kann das Hard limit raufsetzen.
    Wobei das Softlimit nicht über das Hard limit gesetzt werden kann.

    Deswegen funktioniert vermutlich auch der nachträgliche ulimit aufruf nicht mehr.
    Du kannst natürlich auch setrlimit() benutzen und da steht folgendes.

    EPERM A non-superuser tries to use setrlimit() to
    increase the soft or hard limit above the current
    hard limit, or a superuser tries to increase
    RLIMIT_NOFILE above the current kernel maximum.

    nur mal so nen Hinweis

    gruß

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •