Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/47: Рейтинг темы: голосов - 47, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 12.06.2014
Сообщений: 76
1

В каких случаях нужно создавать динамические переменные, а в каких статические?

24.07.2014, 19:16. Показов 8732. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
такой же вопрос и по массивам ! Объясните пожалуйста !
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.07.2014, 19:16
Ответы с готовыми решениями:

Объясните в каких случаях используеться char, а в каких string?
Зачем(в каких случаях) использовать char, и char *... Зачем(в каких случаях) использовать string...

Написание GUI руками, без привлечения специализированных фреймворков - нужно ли и если да, то в каких случаях?
Хочется узнать мнение гуру по поводу написания GUI руками.Можно ли реально от этого выиграть в...

<iostream> в каких случаях используется?
Что такое &lt;iostream&gt; расскажите о нем, для чего он используется.

Static обьект, в каких случаях применяется?
Всем доброго дня ! Скажите пожалуйста в каком случае применяются статические обьекты.? ...

20
134 / 104 / 60
Регистрация: 26.10.2013
Сообщений: 312
24.07.2014, 19:36 2
Берете любую книгу по С++ и читаете.
Везде это хорошо и понятно расписано.
1
76 / 71 / 55
Регистрация: 17.05.2014
Сообщений: 301
24.07.2014, 20:40 3
Ученик кода, динамическая память медленнее, но больше пространства и можно выгружать ненужные данные. Статическая быстрее. Вот и выбирайте
1
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
24.07.2014, 21:01 4
Хедин, почему статическая память медленнее динамической?
MTRR тут не при чём.
1
76 / 71 / 55
Регистрация: 17.05.2014
Сообщений: 301
24.07.2014, 21:07 5
Лучший ответ Сообщение было отмечено Ученик кода как решение

Решение

castaway, динамическая выделяется медленнее, чем статическая. Нас учили так...
1
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
24.07.2014, 21:21 6
Хедин, а почему ты не написал так изначально? По-моему было бы понятнее то, что ты хочешь выразить, как считаешь?
P.S.: статическая выделяется в compile-time, динамическая - в run-time.
1
0 / 0 / 0
Регистрация: 12.06.2014
Сообщений: 76
24.07.2014, 21:27  [ТС] 7
Спасибо ! Вроде понял
0
76 / 71 / 55
Регистрация: 17.05.2014
Сообщений: 301
24.07.2014, 21:34 8
castaway, тут уж кому как. Я посчитал, что так достаточно понятно.
1
Пес войны
111 / 88 / 22
Регистрация: 23.02.2012
Сообщений: 653
25.07.2014, 20:35 9
Цитата Сообщение от castaway Посмотреть сообщение
статическая выделяется в compile-time
надеюсь ты пошутил
0
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
25.07.2014, 20:48 10
Цитата Сообщение от NeonLost Посмотреть сообщение
надеюсь ты пошутил
А что тебе не нравится? Если сильно к терминологии не придираться, то примерно так оно и есть
0
0 / 0 / 2
Регистрация: 02.05.2013
Сообщений: 65
15.09.2014, 18:26 11
А вообще есть ли смысл динамически инициализировать одну переменную?
Например:
C++
1
int *p = new int;
И если да, то в каких участках программы лучше применять статические переменные, а в каких динамические?
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
15.09.2014, 18:48 12
Цитата Сообщение от Malenych Посмотреть сообщение
А вообще есть ли смысл динамически инициализировать одну переменную?
Например:
Код C++
1
int *p = new int;
Например, в учебных целях. Для демонстрации работы оператора new.
Цитата Сообщение от Malenych Посмотреть сообщение
И если да, то в каких участках программы лучше применять статические переменные, а в каких динамические?
В большинстве случаев используют автоматические переменные (хранятся на стеке).

Статические - как глобальные.
Или, внутри функции, чтобы сохранить значение между вызовами.
Или, если нужен постоянный массив достаточно большого (для стека) размера.

Динамические в куче (new или malloc) - если по логике задачи массивы данных динамически появляются и исчезают. Или размер неизвестен на стадии компиляции.
1
0 / 0 / 2
Регистрация: 02.05.2013
Сообщений: 65
15.09.2014, 19:07 13
gng, ясно, спасибо.
Например, я написал программу в 100 строчек, но в ней мне нужна переменная, которая будет хранить значение, необходимое для 1 строчки из моей программы (например, переменную логического типа для какого-либо условия).
Например:
C++
1
2
3
4
/* --- */
bool value =  (a / b) == 2 ? true : false;
if (bool) {/* ... */};
/* --- */
Все, переменная мне нужна только лишь для проверки условия (конечно инициализацию value можно вложить в условный тег if, но это в общих чертах).
Может быть в рамках производительности будет легче создать динамическую переменную value и после условного оператора освободить память (правда есть и один минус - все равно в памяти останется указатель, размером 4 байта)?

C++
1
2
3
4
5
6
/* --- */
bool *value = new bool;
*value = (a / b) == 2 ? true : false;
if (bool) {/* ... */};
delete value;
/* --- */
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
15.09.2014, 19:17 14
Цитата Сообщение от Malenych Посмотреть сообщение
Может быть в рамках производительности будет легче создать динамическую переменную value
В данном случае вы только потеряете и в производительности (вызов выделения памяти) , и в памяти (указатель + сама переменная, кроме того ОС обычно выделяет память с запасом).
Автоматическая переменная здесь лучший выбор. После завершения функции память освободится.
1
Заблокирован
15.09.2014, 19:19 15
Цитата Сообщение от castaway Посмотреть сообщение
статическая выделяется в compile-time
Ты хочешь сказать, что как я скомпилировал программу, в неё забился кусочек памяти моего компа и теперь всегда там сидит ? Память под статические переменные выделяется во время запуска программы.
0
0 / 0 / 2
Регистрация: 02.05.2013
Сообщений: 65
15.09.2014, 19:26 16
gng, хорошо, но реально ли вообще как-то освободить память, занятую статической переменной до выхода из функции?
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
15.09.2014, 19:35 17
Цитата Сообщение от Malenych Посмотреть сообщение
реально ли вообще как-то освободить память, занятую статической переменной до выхода из функции?
Нет.
Статические переменные освобождаются при завершении программы.
Автоматические при выходе из функции.
Динамические при вызове free() или delete.
1
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
15.09.2014, 23:51 18
Можно сразу отрезать себе ломоть памяти статическим массивом, а потом в программе использовать ее в самых разных целях, застолбив для себя такой кондовый пул памяти
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
16.09.2014, 07:22 19
Scrooge McDuck, я бы сказал во время работы программы, сама программа выделяет память в стеке, об этом заботится компилятор. Это если мы говорим о локальных переменных. Для глобальных резервируется именно участок памяти в адресном пространстве самой программы.
0
74 / 54 / 17
Регистрация: 10.07.2014
Сообщений: 329
16.09.2014, 11:43 20
Если есть возможность реализовать все на статических - к этому надо стремиться.
Очень помогает избавиться от лишних ошибок в коде.
0
16.09.2014, 11:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.09.2014, 11:43
Помогаю со студенческими работами здесь

В каких случаях требуется работа с памятью?
Приветствую всех. Интересует такой вопрос. Я знаком с основами C++. Но я читал где-то, что если...

Написать, в каких случаях не используется конструктор копирования
2)Написать, в каких случаях не используется конструктор копирования

В каких случаях оправданно использование локальных классов?
Здравствуйте. Вопрос: в каких случаях оправданно использование локальных классов? Или когда нужно...

Так в каких случаях стоит использовать наследование?
Здравствуйте, уважаемое сообщество. После прочтения &quot;C++ Coding Standards&quot; by Herb Sutter and...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru