Size: a a a

2020 March 26

АР

Андрей Руссков in pro.cxx
а кстати хороший момент. С destructive move можно было бы и const поля мувать )
источник

IZ

Ilia Zviagin in pro.cxx
Mikhail Demchenko
Подскажите, может ли указатель на функцию член класса быть вызван для не полных типов?
По логике - да, так как в контексте передаётся указатель на неполный тип и указатель на функцию, первым параметром принимающей указатель на неполный тип (так как она член этого типа).
Только через виртуальный метод базы
источник

MD

Mikhail Demchenko in pro.cxx
Mikhail Demchenko
https://godbolt.org/z/ZYjEZw - вот, кто-то может пояснить - что делает ассемблерный код?
@MasterZiv мы коллективным сознанием вот к этому пришли
источник

A

Alex in pro.cxx
Vyacheslav Olkhovchenkov
в функцию будет передан указать на класс и смещение в этом классе (тот кто вызывает смещение знает, у него класс полный). если их сложить то получим тупо указатель на функцию. её и вызываем.
А почему вызов jmp, а не call?
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
Tail call
источник
2020 March 27

CD

Constantine Drozdov in pro.cxx
хм... а чем (кроме явного требования has no virtual functions) наличие виртуального деструктора ограничивает агрегаты?
источник

CD

Constantine Drozdov in pro.cxx
Alex
А почему вызов jmp, а не call?
Потому что переменных на стеке нет
источник

A

Alex in pro.cxx
понял, а если бы функция имела хотя бы один параметр - был бы call?
источник

CD

Constantine Drozdov in pro.cxx
Alex
понял, а если бы функция имела хотя бы один параметр - был бы call?
ну call + ret 0 == jmp
источник

AZ

Alexander Zaitsev in pro.cxx
источник

AZ

Alexander Zaitsev in pro.cxx
потому что не надо кросспостить
источник

S

Stas in pro.cxx
Пойти в @supapro.
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Constantine Drozdov
ну call + ret 0 == jmp
Не обязательно 0, по идее любое значение, влезающее в регистр в ситуации
T f();
T g() {
   return f();
}
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
И при условии, что не надо чистить стек
источник

V

Vyacheslav in pro.cxx
Artöm Bakri Al-Sarmini
Не обязательно 0, по идее любое значение, влезающее в регистр в ситуации
T f();
T g() {
   return f();
}
Было бы здорово, если б можно было отключить сохранение фрейма стека для хвостовых вызовов для stdcall функций, типа


int __stdcall g(int);
void __stdcall h(int, int);
int __stdcall k(int, int, const int);

int f() {
 g(1);
 h(2,3);
 return k(4,5,6);
}

pop eax
push 6
push 5
push 4
push eax
push 3
push 2
push offset k
push 1
push offset h
jmp offset g
источник

V

Vyacheslav in pro.cxx
Для всяких штук типа
FreeLibraryAndExitThread тогда не приходилось бы костыли городить
источник

V

Vyacheslav in pro.cxx
Но на такое вряд ли пойдут, т.к. все функции в винде вызываются через таблицу функций, которая находится в регионе смапленном из LoadLibrary, и FreeLibrary этот регион выгрузит.
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
Можно просто не пользоваться виндой
источник

V

Vyacheslav in pro.cxx
Vyacheslav Olkhovchenkov
Можно просто не пользоваться виндой
В линуксе с dlopen и динамической подгрузкой/выгрузкой библиотек тоже не всё гладко
источник

CD

Constantine Drozdov in pro.cxx
Vyacheslav Olkhovchenkov
Можно просто не пользоваться виндой
Send this feedback to Microsoft
источник