Как изменение количества переменных-членов вызываемого класса сопоставляется со сборкой вызывающей его функции?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

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