Ist es möglich, Alloca für C++-Coroutinen zu verwenden?C++

Programme in C++. Entwicklerforum
Guest
 Ist es möglich, Alloca für C++-Coroutinen zu verwenden?

Post by Guest »

C++ verwendet standardmäßig die globale Platzierung new, um Coroutinen zuzuweisen. Im Vergleich zu Rust, das sie stapelweise zuweisen kann, bleibt dadurch jedoch möglicherweise viel Leistung auf dem Spielfeld. Das ist enttäuschend, da dies für die meisten Coroutinen in Ordnung wäre – oft wartet man direkt beim Erstellen auf eine Coroutine oder wartet sofort auf einen Join/Kombinator davon und mehrere andere. Sie können den Operator new und den Operator delete für einen Promise-Typ überschreiben und einen benutzerdefinierten Allokator erstellen, der eine strikte FIFO-Zuweisung über einen vorab zugewiesenen Heap-Bereich durchführt, es wäre jedoch im Allgemeinen immer noch besser, die bereits vorhandenen Threads wiederzuverwenden vorhanden, bereits heiß im Cache-Stack.
AFAICT es ist unmöglich, alloca dafür im laufenden Betrieb zu verwenden – jeder Aufruf dazu im Operator new wäre dies wird freigegeben, wenn die Operatorfunktion zurückkehrt. Sie könnten mit alloca in einer Funktion der obersten Ebene einen großen Teil des Speicherplatzes vorab zuweisen und dann den Operator new für den Promise-Typ definieren, um ihn aus diesem Bereich zuzuweisen, aber das ist praktisch dasselbe wie ein separater Heap zugewiesener Bereich aus der Perspektive der Cache-Hotness (alle Ihre Coroutinen verwenden einen separaten speziellen, ansonsten kalten Bereich, anstatt mit Ihren regulären Aufrufen über die tatsächliche Oberseite des Stapels vermischt zu werden).
Ist da irgendeine Möglichkeit, alloca vorzunehmen Arbeit?
Hier gibt es eine verwandte Frage, ob Sie alloca innerhalb einer Coroutine aufrufen können, aber ich frage nach der Verwendung zur Unterstützung des Zuweisung der Coroutine selbst (was zwangsläufig außerhalb der Coroutine geschieht), bevor sie ausgeführt wird.
Es gibt auch diese offene Frage, ob stapellose C++-Coroutinen ein Problem darstellen, wobei einige Antworten versuchen, dies zu rechtfertigen Das Design erwähnt alloca jedoch überhaupt nicht und geht nicht darauf ein, dass das Rust-Modell ein Existenzbeweis dafür ist, dass es prinzipiell möglich ist, Stapelzuweisungen zu verwenden.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post