"nosplit stack overflow" beim Erstellen eines Go-Projekts?

8

Ich habe in meinem Code eine Frühjahrsputze gemacht, indem ich es in mehr Go-Pakete aufgeteilt habe, hauptsächlich um die Wiederverwendbarkeit zu verbessern (jeder "Baustein" in seinem eigenen Paket).

Nachdem ich die Importfehler behoben habe, habe ich festgestellt, dass mein Programm plötzlich nicht mehr funktioniert. Das Ausführen von "go build" gibt einen Fehler nosplit stack overflow zurück.

  

roboter main.init: nosplit stack overflow

%Vor%      

runtime.main: nosplit stack overflow

%Vor%

Weiß jemand, worum es geht? Ich kann nicht viel Dokumentation darüber finden, was die Ursache sein könnte, außer dass dies in einigen Fällen ist ein Fehler, der angeblich behoben wurde .

Ein Teil des Codes wurde in einen neuen Ordner im Ordner "src" aufgeteilt, so dass die Dateistruktur nun wie folgt aussieht:

%Vor%

Ich verwende Go 1.0.3 unter Windows 7 (x64).

    
Mikke 21.03.2013, 10:12
quelle

1 Antwort

5

Dies ist anscheinend dasselbe wie hier , das gesagt wurde in der Spitze fixiert werden. Das entsprechende Update kann hier überprüft werden.

Um das Problem so zusammenzufassen, wie ich es sehe: Geteiltes Stapeln wird für das Wachstum von Stapeln anstelle des konventionellen festen Speicherbereichs verwendet. Dies hat den Vorteil, dass mehr Threads erzeugt werden können, da nur der benötigte Stackspeicher reserviert ist. Das Problem hier scheint zu sein, dass der Linker Funktionen markiert, die Speicher auf dem Split-Stack nicht versehentlich als "nicht gespalten" verwenden, da er den Split-Stack-Prolog nicht findet. Dies führt dazu, dass der Linker ein falsches Stack-Limit berechnet, was wiederum den Linker denken lässt, dass es keinen Platz gibt, und die Fehlermeldung an Sie ausgibt.

Leider ist der einzige Weg, um die Tipp-Version zu bekommen, es selbst zu kompilieren. Wie bereits von Nick Craig-Wood erwähnt, finden Sie hier die Anweisungen . Wenn Sie wirklich nicht upgraden können, könnten Sie versuchen, dies zu umgehen, indem Sie eine beliebige lokale Variable in Ihren init -Funktionen zuweisen. Aber das ist natürlich sehr unordentlich.

    
nemo 22.03.2013, 01:11
quelle

Tags und Links