Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Ученик кода
0 / 0 / 0
Регистрация: 12.06.2014
Сообщений: 76
1

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

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

такой же вопрос и по массивам ! Объясните пожалуйста !
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.07.2014, 19:16
Ответы с готовыми решениями:

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

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

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

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

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

20
stzer
111 / 87 / 54
Регистрация: 26.10.2013
Сообщений: 273
Завершенные тесты: 2
24.07.2014, 19:36 2
Берете любую книгу по С++ и читаете.
Везде это хорошо и понятно расписано.
1
Хедин
74 / 69 / 55
Регистрация: 17.05.2014
Сообщений: 301
24.07.2014, 20:40 3
Ученик кода, динамическая память медленнее, но больше пространства и можно выгружать ненужные данные. Статическая быстрее. Вот и выбирайте
1
castaway
Эксперт С++
4934 / 3039 / 455
Регистрация: 10.11.2010
Сообщений: 11,119
Записей в блоге: 10
Завершенные тесты: 1
24.07.2014, 21:01 4
Хедин, почему статическая память медленнее динамической?
MTRR тут не при чём.
1
Хедин
74 / 69 / 55
Регистрация: 17.05.2014
Сообщений: 301
24.07.2014, 21:07 5
Лучший ответ Сообщение было отмечено Ученик кода как решение

Решение

castaway, динамическая выделяется медленнее, чем статическая. Нас учили так...
1
castaway
Эксперт С++
4934 / 3039 / 455
Регистрация: 10.11.2010
Сообщений: 11,119
Записей в блоге: 10
Завершенные тесты: 1
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
Хедин
74 / 69 / 55
Регистрация: 17.05.2014
Сообщений: 301
24.07.2014, 21:34 8
castaway, тут уж кому как. Я посчитал, что так достаточно понятно.
1
NeonLost
Пес войны
110 / 87 / 22
Регистрация: 23.02.2012
Сообщений: 653
25.07.2014, 20:35 9
Цитата Сообщение от castaway Посмотреть сообщение
статическая выделяется в compile-time
надеюсь ты пошутил
0
Voivoid
709 / 281 / 16
Регистрация: 31.03.2013
Сообщений: 1,339
25.07.2014, 20:48 10
Цитата Сообщение от NeonLost Посмотреть сообщение
надеюсь ты пошутил
А что тебе не нравится? Если сильно к терминологии не придираться, то примерно так оно и есть
0
Malenych
0 / 0 / 2
Регистрация: 02.05.2013
Сообщений: 59
15.09.2014, 18:26 11
А вообще есть ли смысл динамически инициализировать одну переменную?
Например:
C++
1
int *p = new int;
И если да, то в каких участках программы лучше применять статические переменные, а в каких динамические?
0
gng
819 / 562 / 169
Регистрация: 08.09.2013
Сообщений: 1,511
15.09.2014, 18:48 12
Цитата Сообщение от Malenych Посмотреть сообщение
А вообще есть ли смысл динамически инициализировать одну переменную?
Например:
Код C++
1
int *p = new int;
Например, в учебных целях. Для демонстрации работы оператора new.
Цитата Сообщение от Malenych Посмотреть сообщение
И если да, то в каких участках программы лучше применять статические переменные, а в каких динамические?
В большинстве случаев используют автоматические переменные (хранятся на стеке).

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

Динамические в куче (new или malloc) - если по логике задачи массивы данных динамически появляются и исчезают. Или размер неизвестен на стадии компиляции.
1
Malenych
0 / 0 / 2
Регистрация: 02.05.2013
Сообщений: 59
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
gng
819 / 562 / 169
Регистрация: 08.09.2013
Сообщений: 1,511
15.09.2014, 19:17 14
Цитата Сообщение от Malenych Посмотреть сообщение
Может быть в рамках производительности будет легче создать динамическую переменную value
В данном случае вы только потеряете и в производительности (вызов выделения памяти) , и в памяти (указатель + сама переменная, кроме того ОС обычно выделяет память с запасом).
Автоматическая переменная здесь лучший выбор. После завершения функции память освободится.
1
Scrooge McDuck
Заблокирован
15.09.2014, 19:19 15
Цитата Сообщение от castaway Посмотреть сообщение
статическая выделяется в compile-time
Ты хочешь сказать, что как я скомпилировал программу, в неё забился кусочек памяти моего компа и теперь всегда там сидит ? Память под статические переменные выделяется во время запуска программы.
0
Malenych
0 / 0 / 2
Регистрация: 02.05.2013
Сообщений: 59
15.09.2014, 19:26 16
gng, хорошо, но реально ли вообще как-то освободить память, занятую статической переменной до выхода из функции?
0
gng
819 / 562 / 169
Регистрация: 08.09.2013
Сообщений: 1,511
15.09.2014, 19:35 17
Цитата Сообщение от Malenych Посмотреть сообщение
реально ли вообще как-то освободить память, занятую статической переменной до выхода из функции?
Нет.
Статические переменные освобождаются при завершении программы.
Автоматические при выходе из функции.
Динамические при вызове free() или delete.
1
_Ivana
3236 / 1863 / 235
Регистрация: 01.03.2013
Сообщений: 5,108
Записей в блоге: 5
15.09.2014, 23:51 18
Можно сразу отрезать себе ломоть памяти статическим массивом, а потом в программе использовать ее в самых разных целях, застолбив для себя такой кондовый пул памяти
0
castaway
Эксперт С++
4934 / 3039 / 455
Регистрация: 10.11.2010
Сообщений: 11,119
Записей в блоге: 10
Завершенные тесты: 1
16.09.2014, 07:22 19
Scrooge McDuck, я бы сказал во время работы программы, сама программа выделяет память в стеке, об этом заботится компилятор. Это если мы говорим о локальных переменных. Для глобальных резервируется именно участок памяти в адресном пространстве самой программы.
0
krv
74 / 54 / 17
Регистрация: 10.07.2014
Сообщений: 328
16.09.2014, 11:43 20
Если есть возможность реализовать все на статических - к этому надо стремиться.
Очень помогает избавиться от лишних ошибок в коде.
0
16.09.2014, 11:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2014, 11:43

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

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

В каких случаях целесообразно динамическое выделение памяти?
Здравствуйте, у меня назрел вот такой вот вопросик: Как я понимаю динамические...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru