mysql_fetch_lengths, wird jedes mal speicher reserviert?



  • Hallo,

    mysql_fetch_lengths() aus der MYSQL-API
    liefert einen Zeiger auf einen unsigned long zurück (=> ein Array)

    jetzt würd's mich interessieren, wie es dabei mit der Speicherverwaltung ausschaut.

    wird da bei jeder Anfrage neuer Speicher allokiert oder wird jedesmal
    der selbe Speicherbereich verwendet (und evtl. die Größe angepasst?)

    Hintergrund:
    Will erst alles in eine Datenstruktur einlesen.
    Jetzt geht's darum, ob ich selber Speicher anforden muss,
    um die Inhalte von dem Array zu speichern, oder ob es reicht,
    wenn ich mir den Zeiger, den die Funktion zurückgibt, merke...

    mfg
    Martin

    PS:
    zumindest die Adressen ändern sich jedesmal
    => scheinbar wird jedesmal neuer Speicher angefordent,
    aber wo wird der dann freigegeben? 😮
    ein schönes "delete[]" endet im Nirvana....

    thx
    Martin



  • Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Rund um die Programmierung in das Forum Datenbanken verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Speicher anfordern und freigene macht die API. Ich frage mich wozu du dies ine ien eigen Struktur speichern willst. fetch_lengths gibt dir lediglich die länge des stings jeder spalte/row zurück.



  • najo,

    hab mir eine kleine Wrapper-Klasse geschrieben, weil ich nix anderes zum Laufen
    gebracht hab und hätte hald alle Daten, die eine Anfrage zurückliefert,
    als verkettete Liste zurückgegeben.

    Inzwischen hab ich davon allerdings Abstand genommen und übergeb stattdessen einen
    Funktionszeiger einer Funktion, die dann für jede Zeile aufgerufen wird...

    Interessieren würd mich die Sache mit dem Speicher aber nach wie vor.
    Aber is ja jetzt beantwortet 🙂

    Auch wenn ich ned recht versteh, wie sich die API drum kümmern soll, dass der Speicher wieder freigegeben wird (woher weiss die API, ab wann ich die Daten nicht
    mehr brauch und der Speicher somit freigegeben werden kann?)

    mfg
    Martin



  • Die API reserviert immer Speicher für das aktuelle ROW-SET.
    Wenn du die Daten mit store_result abholst sogar für die komplette Ergebnissmenge. Übertragen werden hier die ROWS und die Header-INFO. Daraus berechnet die API dann bestimmte Dinge wie z.B. die max. Zeichenbreite einer Spalte anhand des längsten Eintrags.
    Wenn du dir eine eigene Struktur machst dann brauchst du doppelt Speicher.
    Ist nicht sinnvoll.


Anmelden zum Antworten