копирование и память |
Здравствуйте, гость ( Вход | Регистрация )
копирование и память |
rp80 |
22.12.2011, 13:47
Сообщение
#1
|
Студент Группа: Участник Сообщений: 36 Регистрация: 10.9.2011 Пользователь №: 2860 Спасибо сказали: 0 раз(а) Репутация: 0 |
Копирование указателя на объект не приводит к копированию объекта.
Значит следующий код приведет к утечки памяти:
Правильно копировать так:
А что происходит при копировании переменных в стеке?
Теряется ли память выделенная первоначально под s? |
|
|
Iron Bug |
22.12.2011, 14:47
Сообщение
#2
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
Понятно, что при выходе почистится стек, но если в блоке (функции) мы создадим массив на 2гб и он при таком копировании потеряется, то на следующий уже может не хватить места. ну, какбэ стек не резиновый. и два гигабайта под стек, может, и можно выделить (опцией при компиляции), но нецелесообразно. если собираешься работать с большими массивами - это куча и динамическое размещение. |
|
|
rp80 |
22.12.2011, 14:54
Сообщение
#3
|
Студент Группа: Участник Сообщений: 36 Регистрация: 10.9.2011 Пользователь №: 2860 Спасибо сказали: 0 раз(а) Репутация: 0 |
ну, какбэ стек не резиновый. и два гигабайта под стек, может, и можно выделить (опцией при компиляции), но нецелесообразно. если собираешься работать с большими массивами - это куча и динамическое размещение. Да это понятно. Вообще работа со стеком крайне быстра при объеме стека меньше 4кб, а далее все становится медленнее. И советуют в общем случае если функция работает с памятью больше 1 мб, то по-любому выделять память в куче. Но вопрос не в этом ) А в том, что хочется понять что конкретно происходит с памятью при копировании локальных переменных. |
|
|
BRE |
22.12.2011, 15:07
Сообщение
#4
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
|
|
|
Текстовая версия | Сейчас: 28.4.2024, 10:42 |