Мне интересно, возможны ли такие сценарии для компилятора?
сначала мы определяем SomeDataType как:
Код: Выделить всё
struct SomeDataType{
public:
int a;
int b;
int c;
};
Сценарий №1_в отношении вызываемой функции, имеющей такой ссылочный параметр:
Код: Выделить всё
void doSomething(SomeDataType & input){
...
}
при условии, что функция не является встроенной и в эту функцию в программе передаются только переменные в области вызывающих функций, а также тот факт, что ссылки не обязательно являются указателями, часть памяти, в которой размещается входной аргумент, используется совместно между фреймом стека любой вызывающей функции и фреймом стека вызываемой функции «doSomething», так что «doSomething» может обращаться к этому параметру точно так же, как он обращается к любой локальной переменной в своей локальной области видимости, которая путем добавления смещения к базовый указатель, который определяет начальный адрес своего кадра стека.
Сценарий №2_Мне это кажется более невероятным, но в любом случае; относительно вызываемой функции, которая возвращает структуру типа SomeDataType:
Код: Выделить всё
SomeDataType doSomething(){
SomeDataType someStruct;
...
return someStruct;
};
часть памяти, в которой находится структура «someStruct», совместно используется кадром стека любого вызывающего объекта и кадром стека вызываемой функции «doSomething», поэтому рассмотрим следующий оператор в вызывающая функция:
в области этого вызывающего объекта использование «TheStruct» приводит к использованию той же части памяти, где находится «SomeStruct» в области вызываемого объекта, что означает, что по сути функция вызываемого абонента этого не делает. t копировать "someStruct" куда угодно, даже если копирование было необходимо, например, когда в вызывающей функции был оператор, подобный приведенному ниже, указывающий, что назначение не является структурой в области вызывающего объекта:
обязанностью вызывающей стороны будет скопировать содержимое этой общей части туда, куда указывает указатель.
Подробнее здесь:
https://stackoverflow.com/questions/173 ... ack-frames