Здравствуйте, гость ( Вход | Регистрация )
Ponchikus | Дата 20.1.2016, 13:42 |
ViGOur, спасибо, теперь более понятно. Попробовал с тестовым классом поэкспериментировать, в самом деле получается что-то подобное тому, что Вы и описали. Всем спасибо за ответы ! | |
ViGOur | Дата 20.1.2016, 10:15 |
Ну смотри, если бы все это отрабатывало без оптимизации, то вызовы были бы примерно такие: При оптимизации буду вызваны только Конструктор и Деструктор, что-то вроде: Но со своим выделением памяти и своим сборщиком мусораДля того, чтобы изучить как и что работает ты можешь создать обычный класс CClass например и сделать для него все то же самое поэкспериментировав с ключами оптимизации. |
|
Алексей1153 | Дата 20.1.2016, 8:03 |
Ponchikus, ты выводишь адрес локальной переменной, которая уже будет уничтожена по выходу из функции. Поэтому адрес вполне уже может использоваться под новые нужды. Значение, которая вернула функция, используется в конструкторе при создании нового объекта (QString str), для которого и был использован уже освободившийся адрес кстати, вот так
адрес может быть выведен другой (по логике - он обязательно другой будет) |
|
Ponchikus | Дата 19.1.2016, 21:34 |
lanz, благодарю за пояснения, только всеравно не ясно, как у локальной переменной созданной в функции и у переменной созданной в другой функции может быть один и тот же адрес. Это странно. |
|
lanz | Дата 19.1.2016, 19:46 |
Цитата принимает примерно следующий вид Нет, RVO, означает что не создается временный объект для хранения значения, возвращаемого из функции. Локальная переменная не отбрасывается, иначе бы qDebug() ничего не печатал бы. Немного переделанный пример из википедии:
|
|
Ponchikus | Дата 19.1.2016, 18:45 |
Это оптимизация такая: Return value optimization Если поиграться с разными уровнями оптимизации, то скорее всего при -O0 должны быть разные адреса. Если я правильно понял, функция returnStr(), благодаря этой оптимизации (в которой локальная переменная "string" как я понял вообще отбрасывается), в неявной форме принимает примерно следующий вид:
Так ? Спасибо за Ваш ответ. |
|
ViGOur | Дата 19.1.2016, 17:24 |
Это оптимизация такая: Return value optimization Если поиграться с разными уровнями оптимизации, то скорее всего при -O0 должны быть разные адреса. |
|
Ponchikus | Дата 19.1.2016, 15:32 |
Доброго времени суток, уважаемые форумчане. Очень интересует следующий вопрос.
Почему в этом случае у переменной "string" и у переменной "str" один и тот же адрес ??? Спасибо! |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 29.3.2024, 0:42 |