аллокация нужна, но одна аллокация/деаллокация на асинхронную корутину (которая может оптимизироваться) это многократно дешевле чем скопировать сколько-то там килобайт стека.
Ну шаренные данные меж поточно, надо шарить да. Всё таки, эти аллокации штука неплохая, в сравнении с тем, что параллельное выполнение работает быстрее, однопоточного.
До 11 стандарта не было многопоточки вообще, это же не значит что она не нужна, это кажется не аргумент в плюсах, потому что все делают долго и стараются сделать максимально идеально