Subarrays übergeben



  • Hallo,
    ich habe in meiner main-Funktion einen mehrdimensionalen std:array definiert:

    array<array<array<array<double,2>,Nx>,Nt>,NOV> daten;
    

    Nun möchte ich für für einen festen Index i < NOV das so enstehende "Teil-Array" an eine Funktion übergeben. Ich habe es bereits mit dem klassischen Pointersymbol probiert (ähnlich wie bei arrays in C):

    funktion(&daten[i][0][0][0]);
    

    Das funktioniert aber nicht.
    Hat jemand eine Lösung dafür?

    Vielen Dank,

    Fabian


  • Mod

    daten[i]



  • @SeppJ Vielen Dank!



  • Bedenke jedoch, daß lokale Arrays den Stapelbereich (stack) überschreiten können (Standard meistens 1MB), je nach Größe der Konstanten und Freispeicher (heap) dafür besser geeignet ist.



  • @Th69 sagte in Subarrays übergeben:

    Standard meistens 1MB

    Das scheint mir der Standard von Visual Studio (unter Windows) zu sein. Unter Linux hängt's z.B. von dem ulimit -s ab, das gesetzt wird - und das ist bei den verbreiteten Distributionen wie einem aktuellen Ubuntu in der Regel auf 8 MiB gesetzt.

    Aber dennoch: wenn 2*Nx*Nt*NOV*sizeof(double) "groß" wird, solltest du dir überlegen, die Daten im Freispeicher abzulegen.



  • Genau. Auf Windows hängt es von einem Eintrag im PE File (.exe File) ab, der vom Visual Studio Linker per Default mit 1 MB geschrieben wird (kann man natürlich per Linker-Switch ändern).

    Auf Linux und vermutlich den meisten anderen Systemen ist es eine Systemeinstellung. Die 8 MB kann ich auch bestätigen.

    Wenn das Programm dann selbst einen Thread startet, kann es mitgeben wie gross der Stack sein soll. Auf Windows ist die Angabe verpflichtend, auf Linux ist es nur ein Wunsch dem das OS nachkommen kann - oder auch nicht.


Log in to reply