Ich bin auf der Suche nach einer Möglichkeit, eine C-Funktion in einem anderen Stapel aufzurufen, dh speichern Sie den aktuellen Stapelzeiger, legen Sie den Stapelzeiger an einer anderen Stelle, rufen Sie die Funktion und Stellt den alten Stapelzeiger wieder her, wenn er zurückkehrt.Call C-Funktion mit verschiedenen Stack-Pointer (GCC)
Der Zweck ist ein leichtes Threading-System für eine Programmiersprache. Threads arbeiten auf sehr kleinen Stapeln, prüfen, wann mehr Stack benötigt wird und passen die Größe dynamisch an. Dies ist so, dass Tausende von Threads zugewiesen werden können, ohne viel Speicher zu verschwenden. Wenn man C-Code aufruft, ist es nicht sicher, einen winzigen Stack zu verwenden, da der C-Code nichts über das Überprüfen und Ändern der Größe weiß. Daher möchte ich einen großen Pthread-Stack verwenden, der nur zum Aufruf von C verwendet wird der gleiche Pthread).
Jetzt könnte ich Assembly Code Stubs schreiben, die gut funktionieren, aber ich fragte mich, ob es eine bessere Möglichkeit gibt, dies zu tun, wie eine gcc-Erweiterung oder eine Bibliothek, die es bereits implementiert. Wenn nicht, dann denke ich, werde ich meinen Kopf in ABI und Assembler-Handbüchern vergraben lassen ;-) Ich frage das nur aus Faulheit und will das Rad nicht neu erfinden.
Sie können Ihre eigenen "Threads" mit individualisierten Stacks mit dem Klon syscall implementieren. Wenn Sie den direkten Systemaufruf anstelle des libc-Wrappers verwenden, funktioniert es fast wie fork, außer dass Sie angeben können, welche Ressourcen und Namespaces freigegeben sind. – technosaurus