Можно ли использовать alloca для сопрограмм C++?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Можно ли использовать alloca для сопрограмм C++?

Сообщение Anonymous »

C++ по умолчанию использует глобальное размещение new для размещения сопрограмм. Но это потенциально снижает производительность по сравнению с Rust, который может распределять их по стеку. Это разочаровывает, потому что для большинства случаев использования сопрограмм это было бы нормально - часто вы co_await сопрограмму прямо при ее создании или co_await ее объединение/комбинатор и несколько других сразу. Вы можете переопределить оператор new и оператор delete для типа обещания и создать собственный распределитель, который выполняет строгое распределение FIFO по некоторой заранее выделенной области кучи, но в целом все равно лучше повторно использовать уже существующий, уже горячий в стеке кэша.
AFAICT невозможно использовать alloca для этого на лету - любой вызов его в операторе new будет освобождается, когда функция оператора возвращается. Вы можете заранее выделить большой кусок пространства с помощью alloca в какой-нибудь функции верхнего уровня, а затем определить оператор new для типа обещания, который будет выделяться из этого региона, но это фактически то же самое, что иметь отдельную кучу выделенная область с точки зрения горячего кэша (все ваши сопрограммы используют отдельную специальную, иначе холодную область, вместо того, чтобы смешиваться с вашими обычными вызовами, используя реальную вершину стека).
Есть ли там любой способ сделать alloca работает?
Здесь есть связанный с этим вопрос о том, можете ли вы вызвать alloca внутри сопрограммы, но я спрашиваю о используя его для поддержки выделения самой сопрограммы (что обязательно происходит вне ее) перед ее запуском.

Подробнее здесь: https://stackoverflow.com/questions/793 ... coroutines
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Можно ли использовать alloca для сопрограмм C++?
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Можем ли мы использовать alloca() или расширения массива переменной длины в сопрограммах C++20?
    Anonymous » » в форуме C++
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • CoroutineScope не ждет дочерних сопрограмм?
    Гость » » в форуме Android
    0 Ответы
    40 Просмотры
    Последнее сообщение Гость
  • CoroutineScope не ждет дочерних сопрограмм?
    Гость » » в форуме Android
    0 Ответы
    34 Просмотры
    Последнее сообщение Гость
  • CoroutineScope не ждет дочерних сопрограмм?
    Anonymous » » в форуме Android
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»