Форум программистов, компьютерный форум CyberForum.ru

Возвращение значения из функции - C++

Восстановить пароль Регистрация
 
IvanInanovich
0 / 0 / 0
Регистрация: 03.01.2013
Сообщений: 113
07.05.2013, 02:59     Возвращение значения из функции #1
Ребят, подскажите, когда функция возвращает значение из функции, то в памяти создается копия значения?
Я все время думал что функция на "прямую" возвращает значение в программу, после чего перестает существовать. Но вот по словам автора книги, как я понимаю создается копия. К примеру если мы возвращаем объект какого-нибудь класса
return object(a,b);
то фактически мы создаем 2 лишних объекта в памяти в добавок запускаем 2 конструктора, я прав?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6167 / 2896 / 282
Регистрация: 04.12.2011
Сообщений: 7,702
Записей в блоге: 3
07.05.2013, 03:58     Возвращение значения из функции #2
IvanInanovich, для представления о механизме передачи аргументов и возврата значений, нужно разделить передачу/возврат по ссылке (копии не создаются), и передачу/возврат по значению. Для этого ещё нужно уточнить, что память, выделяемая программе делится на статическую (область данных и область кода), динамическую, называемую в некоторых средах стеком (динамической памяти). В динамической памяти располагается стек вызовов. При передаче/возврате по значению, аргументы, локальные переменные и возвращаемое значение существуют (создаются и исчезают) на стеке вызовов. Поэтому о первых и последних говорят, что они копируются. Причем, сколько создается копий какой либо переменной-значения, зависит от того сколько вызовов делает сама функция и все последующие вызванные, пока управление не вернётся и она не закончит работу вернув значение (его использует вызвавшая функция). Если в функции не вызываются пользовательские функции, это не означает, что вызовов нет. Обычная cout это вызов, поэтому легче написать в соответствующих конструкторах и деструкторе сообщения, как это делается в примерах из литературы и посмотреть, что происходит в каждом конкретном случае, чем просчитать наперёд.) В целом об этом лучше читать, иначе коротко не скажешь. Если где соврал, меня поправят.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
07.05.2013, 11:31     Возвращение значения из функции #3
IGPIGP, почему-то ничего не сказано про "кучу". А вообще, гуглинг по фразе "process memory layout" выдает много интересных картинок.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6167 / 2896 / 282
Регистрация: 04.12.2011
Сообщений: 7,702
Записей в блоге: 3
07.05.2013, 11:37     Возвращение значения из функции #4
Цитата Сообщение от Tulosba Посмотреть сообщение
кучу
Куча, динамическая память, heap, - часть динамической памяти, для динамически создаваемых объектов. Человеку который начинает вникать, - отличный набор для кашеобразного замеса. И так жалею, что про "стек" динамической памяти написал.
Tulosba
07.05.2013, 11:48
  #5

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
Человеку который начинает вникать, - отличный набор для кашеобразного замеса.
Чтоб сразу понял, не влезай (без защиты) - убъёт

IvanInanovich
0 / 0 / 0
Регистрация: 03.01.2013
Сообщений: 113
07.05.2013, 15:23  [ТС]     Возвращение значения из функции #6
Нужно будет уделить время почитать по-поводу памяти. Т.к. в книге было только 2 примера как работает стек и один раз встретилось слово "куча", если бы до этого не лазил по интернету, мог бы с перепугу и не про ту кучу подумать : ))
Возможно вы знаете "тонкую" литературу про память компьютера ? Или все же лучше погуглить+википедия?
Есть одна книга про архитектуру компьютера, которую планирую прочитать, там от а до я. Но она по-моему 900+ страниц. Тут уже дело не в лени, а во времени.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
07.05.2013, 15:41     Возвращение значения из функции #7
IvanInanovich, я думаю, это надо не про архитектуру компьютера, а про архитектуру ОС, скорее.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2013, 15:49     Возвращение значения из функции
Еще ссылки по теме:

Возвращение из функции значения массива C++
Возвращение значения функции C++
Возвращение значения функции C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6167 / 2896 / 282
Регистрация: 04.12.2011
Сообщений: 7,702
Записей в блоге: 3
07.05.2013, 15:49     Возвращение значения из функции #8
Цитата Сообщение от IvanInanovich Посмотреть сообщение
Нужно будет уделить время почитать по-поводу памяти.
Этому всегда найдётся время. Потому, что нет пределов у этого вопроса.)
Я находил и нахожу везде понемногу. Если кто-то скажет где, - буду сам рад почитать. У Evg была интересная статья, но не смог найти.
Переменные создаются живут и исчезают по разному. Ключевые слова: класс хранения (памяти), область действия, время жизни, область видимости (это уже не столько к памяти, сколько к способу и месту объявления, что важнее для разговора о памяти). Тут чем уже вопрос тем легче на него ответить. Удачи!
Yandex
Объявления
07.05.2013, 15:49     Возвращение значения из функции
Ответ Создать тему
Опции темы

Текущее время: 06:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru