this, через стек?
(например, этот класс полиморфный)
ненадо методам класса делать stdcall.
Та я просто книгу про com читаю. В одном из примеров такое: DECLARE_INTERFACE_(IDerived, IUnknown) { STDMETHOD_(void, Fill) (FIILTYPE fType) PURE; };
Модель COM и применение ATL 3.0. Трельсен
Если правильно: это зависит от того как это реализовано в компиляторе. На своём опыте скажу, что у msvc что у gcc в linux это делалось через регистр EAX. При этом в EBX был указатель на таблицу виртуальных функций. Но на это полагаться нельзя.
там stdcall не ради каких-то оптимизаций, а для ABI
А, то есть thiscall на разных ОС по своему работают? (Какой-то компил делает через стек, какой-то через регистр?)
https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D0%B3%D0%BB%D0%B0%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BE_%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2%D0%B5
погуглите Calling Convension (Соглашение о вызовах), вот эти thiscall, stdcall и прочие были актуальны для x86 (это к вопросу о том, почему в вашем примере на годболте этот атрибут игнорировался компилятором, если вы переключите на x86 msvc, то изменеия будут). На x64 все более однозначно, но на разных операционках соглашение разное
Понятие thiscall на винде изобрели, под линуксом вызовы мембер функций вообще cdecl. И речь под х86, под х64 всё иначе, не говоря о других архитектурах
Обсуждают сегодня