> On 22 Sep 2022, at 13:34, Jonathan Wakely <jwakely.gcc@xxxxxxxxx> wrote: > > On Thu, 22 Sept 2022 at 13:29, Wilhelm Meier wrote: >> >> According to the standard, an implementation can avoid the >> heap-allocation, if >> - the lifetime of the coroutine is strictly within the lifetime of the >> caller >> - the size of coroutine state can be determined at compile time >> >> Looks like this optimization is not yet available because new/delete-ops >> are required. You can provide your own allocation and deallocation functions in the promise class : see - https://eel.is/c++draft/dcl.fct.def.coroutine#9 (and #12). NOTE: this link is the current C++23 draft, the implementation in GCC follows the C++20 version (but the basic provision is stil there) >> >> Is there any work on this topic? > > The so-called HALO optimizations are much more difficult than was > originally thought when the wording in the standard was written. > > https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2477r3.html#background-and-motivation > describes some of the problems. Agreed, this topic needs more consideration (and it is not mandatory, so should not be relied upon for the use-case described in any event). cheers Iain > > >> Thanks! >> Wilhelm >> >> On 21.09.22 15:38, Wilhelm Meier wrote: >>> I tried to use coroutines with avr-gcc (13.0.0) for the AVR target. I >>> managed to include the coroutine-header and to write a very simple >>> generator using the example from cppreference. >>> >>> It compiles well, but then I get undefined symbols: >>> >>> 1) new and delete operator-functions >>> 2) f(f()::f().Frame*) >>> >>> Therefore two question arise here: >>> >>> a) is it possible to use coroutines without head-allocation? E.g. define >>> some global storage for the state of the coroutine? >>> b) if a) can be fullfilled, what is 2) supposed to do? >>> >>> Thanks for any hints, >>> Wilhelm