У меня простой вопрос. Я знаю, что после компиляции программы, когда я вызываю функцию, генерируется стек вызовов с аргументами, местом для локальных переменных, точкой возврата и регистрами, за которые я взимаю плату.
Но в объектно-ориентированном языке, таком как c ++, где компилятор хранит ссылку на текущий объект? object->instanceMethod()
будет хранить указатель объекта как аргумент в стеке вызовов?
Я знаю, что вопрос универсален и спасибо за ответ
В C ++, когда вызывается функция-член, указатель на экземпляр, на котором она будет работать (т.е. что будет this
внутри функции) неявно передается вместе с другими аргументами / параметрами функции. На самом деле, разные системы используют разные соглашения, поэтому некоторое количество таких параметров может быть упаковано в регистры и никогда не помещаться в стек (это, как правило, быстрее), но ваша концепция в основном правильная.
Это определяется реализацией, но на практике вы обнаружите, что большинство (все?) Компиляторов C ++ генерируют код, который передает this
указатель как скрытый первый аргумент функции, так что вы можете получить к нему доступ без явного указания его в сигнатуре метода.