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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
#1

Создание области определния для очистки временных локальных переменных - C++

28.11.2013, 10:27. Просмотров 270. Ответов 4
Метки нет (Все метки)

Предположим, имеется некоторые доп. переменные, используемые только для нескольких действий в функции, а остаток функции (много больше, чем те действия с временными переменными) их не использует, поэтому я бы хотел освободить от них память. Могу ли я быть уверен, что такой код будет давать именно нужный мне результат и temp перестанет занимать память после выхода за скобку? И как такое влияет на оптимизации компилятора?
C++
1
2
3
4
5
6
7
8
9
void SomeFunctionWithSwap(int& x, int& y)
{
{
int temp = x;
x = y;
y = temp;
}
//работаю с X и Y, не используя temp.
}
И будет ли отличаться это по оптимизации и опять-таки освобождению памяти при использовании непримитивным классов?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2013, 10:27     Создание области определния для очистки временных локальных переменных
Посмотрите здесь:

C++ функции для очистки содержимого файла
Макрос определния платформы C++
функции для очистки буфера COM порта? C++
Обьявление локальных переменных C++
C++ Передача локальных переменных одной функции другой
C++ Рекурсия и никаких локальных переменных
Объясните синтаксис программы по полочкам с использованием локальных переменных и прототипа функции C++
Как читать целые числа из файла в аргумент функции без временных переменных? C++
C++ Выделение и освобождение памяти для локальных переменных функций
C++ Программа для очистки диска
C++ Неинициализация локальных переменных
Создание программы для определения принадлежности точки к заштрихованной области на координатной плоскости C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4383 / 3226 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
28.11.2013, 10:44     Создание области определния для очистки временных локальных переменных #2
Про стек слышали? Так вот, в данном случае при входе в блок указатель вершины стека сместиться на размер переменной temp, а при выходе из блока вернется обратно. Если будет более сложный тип с конструктором/деструктором, то при входе в блок помимо прочего вызовется конструктор, а при выходе из блока - деструктор.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
28.11.2013, 10:48  [ТС]     Создание области определния для очистки временных локальных переменных #3
Tulosba, эм, ну да, и что? Т.е. все будет работать так, как я хочу, раз, говорите, деструктор (точно?) вызовется после выхода из области? И что там с оптимизациями?
Tulosba
:)
Эксперт С++
4383 / 3226 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
28.11.2013, 10:52     Создание области определния для очистки временных локальных переменных #4
Цитата Сообщение от nexen Посмотреть сообщение
эм, ну да, и что?
А то, что
Цитата Сообщение от nexen Посмотреть сообщение
temp перестанет занимать память после выхода за скобку
значит лишь то, что вершина стека сместится. Физически как было у процесса памяти, так и осталось.
Цитата Сообщение от nexen Посмотреть сообщение
И как такое влияет на оптимизации компилятора?
См. ассемблерный выхлоп.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
28.11.2013, 17:28  [ТС]     Создание области определния для очистки временных локальных переменных #5
Tulosba, не имею на примере дизассемблера. Да и не факт, что я увижу разницу на таком тривиальном примере, а на реальном разница будет, поэтому лучше спросить опытных
Yandex
Объявления
28.11.2013, 17:28     Создание области определния для очистки временных локальных переменных
Ответ Создать тему
Опции темы

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