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 einenstd::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.
-
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.