Как изменение количества переменных-членов вызываемого класса сопоставляется со сборкой вызывающей его функции?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как изменение количества переменных-членов вызываемого класса сопоставляется со сборкой вызывающей его функции?

Сообщение Anonymous »

Подумайте об этом TU:

Код: Выделить всё

struct Foo {
int operator()(int) const;
};

int foo(Foo b) {
return b(17);
}
Он будет скомпилирован в:

Код: Выделить всё

foo(Foo):
sub rsp, 24
mov esi, 17
lea rdi, [rsp+15]
call Foo::operator()(int) const
add rsp, 24
ret
тогда как, если класс содержит, скажем, 6 членов int, например,

Код: Выделить всё

struct Baz {
int i;
int j;
int k;
int u;
int v;
int z;
int operator()(int) const;
};
тогда тот же foo, что и выше, будет скомпилирован до

Код: Выделить всё

baz(Baz):
sub rsp, 8
mov esi, 17
lea rdi, [rsp+16]
call Baz::operator()(int) const
add rsp, 8
ret
Как сопоставить разницу в сборке с разницей в коде C++?

Подробнее здесь: https://stackoverflow.com/questions/791 ... ass-map-to
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»