копирование и память |
Здравствуйте, гость ( Вход | Регистрация )
копирование и память |
rp80 |
22.12.2011, 13:47
Сообщение
#1
|
Студент Группа: Участник Сообщений: 36 Регистрация: 10.9.2011 Пользователь №: 2860 Спасибо сказали: 0 раз(а) Репутация: 0 |
Копирование указателя на объект не приводит к копированию объекта.
Значит следующий код приведет к утечки памяти:
Правильно копировать так:
А что происходит при копировании переменных в стеке?
Теряется ли память выделенная первоначально под s? |
|
|
Iron Bug |
22.12.2011, 16:03
Сообщение
#2
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
В какое? в сегмент данных. впрочем, может, компилятор для оптимизации их даже в сегмент кода упихивает, ибо константы не меняются, а ближние указатели быстрее. Что происходит с данными s? Как освобождается память занимаемая ими? И освобождается ли вообще? с константными строками ничего не происходит. они остаются. компилятор всё равно выделяет под них место в данных - нет смысла их удалять. во всяком случае, мне не известно о какой-либо хитрой рантайм оптимизации неиспользованных данных. а если это оптимизированное хранение констант в сегменте кода, то их в принципе невозможно удалить. если хочешь, чтобы строки не занимали место - грузи их динамически из какого-то стороннего файла. |
|
|
rp80 |
22.12.2011, 19:17
Сообщение
#3
|
Студент Группа: Участник Сообщений: 36 Регистрация: 10.9.2011 Пользователь №: 2860 Спасибо сказали: 0 раз(а) Репутация: 0 |
с константными строками ничего не происходит. они остаются. компилятор всё равно выделяет под них место в данных - нет смысла их удалять. во всяком случае, мне не известно о какой-либо хитрой рантайм оптимизации неиспользованных данных. а если это оптимизированное хранение констант в сегменте кода, то их в принципе невозможно удалить. если хочешь, чтобы строки не занимали место - грузи их динамически из какого-то стороннего файла. Т.е. если где-то в функции мы создаем десять строк по 100 мб, то экзешник будет 1000+ мб? Ну и правильно я понимаю, что строки это не исключение из правил? Значит значения любых базовых или пользовательских локальных переменных и массивов этих переменных сохраняются в коде? Сообщение отредактировал rp80 - 22.12.2011, 19:28 |
|
|
ilyabvt |
22.12.2011, 19:50
Сообщение
#4
|
Активный участник Группа: Участник Сообщений: 297 Регистрация: 23.6.2011 Пользователь №: 2765 Спасибо сказали: 45 раз(а) Репутация: 3 |
с константными строками ничего не происходит. они остаются. компилятор всё равно выделяет под них место в данных - нет смысла их удалять. во всяком случае, мне не известно о какой-либо хитрой рантайм оптимизации неиспользованных данных. а если это оптимизированное хранение констант в сегменте кода, то их в принципе невозможно удалить. если хочешь, чтобы строки не занимали место - грузи их динамически из какого-то стороннего файла. Т.е. если где-то в функции мы создаем десять строк по 100 мб, то экзешник будет 1000+ мб? Ну и правильно я понимаю, что строки это не исключение из правил? Значит значения любых базовых или пользовательских локальных переменных и массивов этих переменных сохраняются в коде? Не забывайте что речь идет о константных строках, т.е. тех значение которых мы явно задаем в программе. Вы часто в исходнике пишете строку длинною 100 миллионов символов? Строки действительно не исключение, числа заданные явно тоже хранятся в коде. Вот например есть код:
Переменная 'а' хранится в стеке, а число 2 в коде. |
|
|
Текстовая версия | Сейчас: 14.5.2024, 15:03 |