Обсуждение:Си++: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 66:
Здесь, если функция "do_work" не описана как inline, ссылка "reference" реализуется путем автоматического выделения памяти для нее (чтобы хранить там адрес переданной переменной) на стеке всякий раз при вызове этой фукции, и увеличение значений переменных a, b и c происходит не напрямую, а косвенно (как через указатель). Если бы функция была объявлена как inline, компилятор мог бы просто подставить адреса этих переменных непосредственно в код тела функции при каждом вызове этой самой функции.
 
P.S. Хочу только добавить, что вышеприведенный код является лишь иллюстрацией реализации ссылок в общем случае, когда в качестве переменных, на которые идет ссылка из функции, могут выступать объекты классов. На практике такой код копилятор скорее всего оптимизирует сам, убрав вызовы функций, даже без явной пометки их как inline.
[[Участник:Wikibooks user|Wikibooks user]] 15:21, 17 июля 2008 (UTC)
Тоже самое касается возможности размещения адресов в регистрах процессора (что, кстати, также является использованием памяти, только еще более критичной по наличию) -- в общем случае при передачи большего числа параметров и/или вызове подфункций (что наиболее актуально) стековая память является практическим местом хранения значений для реализации ссылок как параметров функции.
 
[[Участник:Wikibooks user|Wikibooks user]] 1516:2140, 17 июля 2008 (UTC)
<hr>
Вернуться на страницу «Си++».