Size: a a a

2020 March 12

АР

Андрей Руссков in pro.cxx
ну да
источник

АР

Андрей Руссков in pro.cxx
(насколько я понимаю)
источник

IA

Igor Akhmetov in pro.cxx
Nikita Provotorov
В обычном случае функции это делают, как вы и сказали, манипуляцией значением специального регистра. Но если они так сделают, находясь в контексте stackful корутины, то они выделят память в стеке потока, а не в стеке этой корутины
Мне приходится каждое сообщение повторять :) Адрес стека корутины записан в ebp, как обычно. Когда переключаетесь на корутину меняется значение стека. Когда переключаетесь обратно восстанавливаете его.
источник

АР

Андрей Руссков in pro.cxx
мы же всё равно исполняем корутину на каком-то стеке, функции изнутри корутины работают на нем же. У корутины свой стек только ради того, чтобы его не приходилось двигать при остановке/передаче корутины
источник

NP

Nikita Provotorov in pro.cxx
ааааа, я понял, значение этого регистра же можно тихонько подменить на стек корутины))
источник

NP

Nikita Provotorov in pro.cxx
@igor_akhmetov спасибо)
источник

АР

Андрей Руссков in pro.cxx
проще думать о корутине как о некотором функциональном объекте который выделен в куче. Просто в коде корутины ты пишешь x = 7; , а работает это как coroPtr->x = 7
источник

m

magras in pro.cxx
Андрей Руссков
проще думать о корутине как о некотором функциональном объекте который выделен в куче. Просто в коде корутины ты пишешь x = 7; , а работает это как coroPtr->x = 7
Добавлю что в stackless (которые в стандарте) это как раз не так и они используют стэк потока который запустил или продолжил исполнение корутины. В activation frame корутины попадают только автоматические переменные, которым нужно пережить suspend корутины. Поэтому они вместо килобайт используемых stackful, stackless корутины могут обходится десятками байт.
источник

АР

Андрей Руссков in pro.cxx
ну я об этом же, да
источник

DS

Dmitry Sokolov in pro.cxx
Если наследоваться от std::array агрегатность теряется же, что лучше в конструкторе принимать? base array или initializer list какой нить?
источник

CD

Constantine Drozdov in pro.cxx
Dmitry Sokolov
Если наследоваться от std::array агрегатность теряется же, что лучше в конструкторе принимать? base array или initializer list какой нить?
Наследование не теряет агрегат
источник

DS

Dmitry Sokolov in pro.cxx
Constantine Drozdov
Наследование не теряет агрегат
Но aggregate initialization не работает же.
источник

CD

Constantine Drozdov in pro.cxx
Dmitry Sokolov
Но aggregate initialization не работает же.
Хм... я засомневался, но мне кажется, что работает
источник

IA

Igor Akhmetov in pro.cxx
Dmitry Sokolov
Но aggregate initialization не работает же.
Давай пример на годболте.
источник

CD

Constantine Drozdov in pro.cxx
Dmitry Sokolov
Но aggregate initialization не работает же.
#include <array>

struct derived : std::array<int, 10> {
};

int main() {
   derived d{42};
   return d[0];
}
источник

AD

Andrey Davydov in pro.cxx
Dmitry Sokolov
Но aggregate initialization не работает же.
работает начиная с C++17
источник

DS

Dmitry Sokolov in pro.cxx
Constantine Drozdov
Хм... я засомневался, но мне кажется, что работает
Хочу чот типа enum indexed array, просто с переопределенным [], можно даже array size например по дефолту  вычислять как Enum::count.
Я почему то думал не работает...
источник

CD

Constantine Drozdov in pro.cxx
Andrey Davydov
работает начиная с C++17
ага, там еще такая вот фигня работает
struct point { int x; int y; };
struct some { point p; int z; };
some{ 0, 0 };
источник

CD

Constantine Drozdov in pro.cxx
мой последний выстрел в ногу (почти)
источник

IA

Igor Akhmetov in pro.cxx
Constantine Drozdov
ага, там еще такая вот фигня работает
struct point { int x; int y; };
struct some { point p; int z; };
some{ 0, 0 };
Это вроде c C++17 не связано.
источник