Großes Array



  • Ich möchte einen Teil meiner Mathe-Funktionen von C auf C++ umstellen.
    Hier verwende ich teilweise sehr große C-Arrays, die ich auf dem Heap anlege.

    Kann ich das bei der Verwendung von std::array auch angeben?
    Ich kann mir vorstellen, dass es sonst leicht zu Stack-Overflows kommt.
    Oder generell: Wie wird der Speicher bei std::arrays verwaltet?



  • Ich kann mir vorstellen, dass es sonst leicht zu Stack-Overflows kommt.

    ja kannst du

    Oder generell: Wie wird der Speicher bei std::arrays verwaltet?

    Stack

    btw: google liefert sehr viel einfach infos zu std::array



  • arrayal schrieb:

    Kann ich das bei der Verwendung von std::array auch angeben?

    Nein - zumindest nicht innerhalb von std::array.
    std::array hat automatic storage duration (ist also auf dem Stack). Da ist nichts magisches drin, es ist wie wie ein normales C-Array.

    Aber du kannst natürlich z.B. einen std::unique_ptr<std::array<...>> nehmen, um das Array im free storage (heap) zu speichern.

    Weißt du die Größe denn schon zur Compilezeit?

    Wenn du die Größe vorher noch nicht weißt, nimm std::vector .
    Du kannst ansonsten auch einen std::unique_ptr<int[]> nehmen.



  • wob schrieb:

    Aber du kannst natürlich z.B. einen std::unique_ptr<std::array<...>> nehmen, um das Array im free storage (heap) zu speichern.

    Ist das Zero-Copy?



  • Ich sehe da erstmal keine Kopie - das ist ja nur ein Typ. Solange du da nix kopierst... Eventuell value initialization beachten, d.h. wenn du

    auto a = std::make_unique<std::array<int, 200>>();
    

    machst, kopierst du 0 in alle 200 Feldelemente. Mit auto a2 = unique_ptr<array<int, 200>>(new array<int, 200>) wäre das nicht der Fall. Meintest du das mit "zero-copy"?



  • wob schrieb:

    Meintest du das mit "zero-copy"?

    Yup.


  • Mod

    dachschaden schrieb:

    wob schrieb:

    Meintest du das mit "zero-copy"?

    Yup.

    Es wäre wünschenswert, wenn du dir die übliche Terminologie aneignen würdest. Unter "Zero-Copy" versteht man i.d.R. etwas Anderes.



  • camper schrieb:

    Es wäre wünschenswert, wenn du dir die übliche Terminologie aneignen würdest. Unter "Zero-Copy" versteht man i.d.R. etwas Anderes.

    Es ist mir relativ egal, ob Programmierer bei "Zero-Copy" nur an Kernelland <=> Userland-Kommunikation denken. Wenn du Daten nicht kopieren musst, dann kopiere sie einfach nicht. Kopien von Userland <=> Userland sind nur wenig billiger, und in diesem Thread haben wir einen schönen Fall, in dem keine Kopie nötig ist => zero copy.

    Wenn dies Leute verwirrt, dann meines Erachtens aus guten Grund - weil sie sich dieser Problematik nicht mal wirklich bewusst sind ("ich mach' ja eh keine Kernel/Treiberentwicklung").

    EDIT: Ich habe bereits in diesem Forum Leute gesehen, die sich einen Server geschrieben, aber dann bei der Verarbeitung der Daten diese wild hin- und herkopiert haben. Wenn ich durch diese Generalisierung Leute davon abbringen kann, dies zu tun, gewinnen alle.



  • dachschaden schrieb:

    Wenn du Daten nicht kopieren musst, dann kopiere sie einfach nicht.

    Das ist richtig. Was hat das jetzt mit deiner Verwendung des Begriffes zu tun?

    dachschaden schrieb:

    und in diesem Thread haben wir einen schönen Fall, in dem keine Kopie nötig ist => zero copy.

    Nein, haben wir nicht. Es war vom Anlegen eines Arrays die Rede. Wo soll es hier bitte zu einer vermeidbaren Kopie kommen?



  • arrayal schrieb:

    Hier verwende ich teilweise sehr große C-Arrays, die ich auf dem Heap anlege.

    Das sind dann keine C-Arrays.


Log in to reply