Wie kann ich einen Stapelüberlauf vermeiden, wenn Fortran ein großes, internes, temporäres Array erstellt?
Ich habe Fortran-Code, der @ aufruRESHAPE
, um eine Matrix so neu anzuordnen, dass die Dimension, über die ich jetzt eine Schleife ausführen möchte, die erste variierende Dimension wird (Spalten-Hauptreihenfolge in Fortran).
Dies hat nichts mit der Interoperabilität von C / Fortran zu tun.
Jetzt ist die Matrix ziemlich groß und wenn ich das @ aufruRESHAPE
function Ich erhalte einen Seg-Fehler, von dem ich sehr überzeugt bin, dass er ein Stapelüberlauf ist. Ich weiß das, weil ich meinen Code in ifort mit @ kompilieren ka-heap-arrays
und das Problem verschwindet.
Ich möchte die Stapelgröße nicht ändern. Dieser Code muss für jeden Computer tragbar sein, ohne dass sich der Benutzer mit der Stapelgröße befassen muss.
Ist da irgendwie kann ich diesen Anruf des @ bekommRESHAPE
Funktion, um den Heap und nicht den Stack für den internen Speicher zu verwenden.
m schlimmsten Fall muss ich 'meine eigenen rollen'RESHAPE
Funktion für diese Instanz, aber ich wünschte, es gäbe einen besseren Weg.