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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Ученик кода
0 / 0 / 0
Регистрация: 12.06.2014
Сообщений: 76
#1

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

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

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

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

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

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

Static обьект, в каких случаях применяется? - C++
Всем доброго дня ! Скажите пожалуйста в каком случае применяются статические обьекты.? class A { int x;

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
stzer
94 / 70 / 21
Регистрация: 26.10.2013
Сообщений: 220
Завершенные тесты: 2
24.07.2014, 19:36 #2
Берете любую книгу по С++ и читаете.
Везде это хорошо и понятно расписано.
1
Хедин
73 / 68 / 36
Регистрация: 17.05.2014
Сообщений: 301
24.07.2014, 20:40 #3
Ученик кода, динамическая память медленнее, но больше пространства и можно выгружать ненужные данные. Статическая быстрее. Вот и выбирайте
1
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
24.07.2014, 21:01 #4
Хедин, почему статическая память медленнее динамической?
MTRR тут не при чём.
1
Хедин
73 / 68 / 36
Регистрация: 17.05.2014
Сообщений: 301
24.07.2014, 21:07 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
castaway, динамическая выделяется медленнее, чем статическая. Нас учили так...
1
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 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
Хедин
73 / 68 / 36
Регистрация: 17.05.2014
Сообщений: 301
24.07.2014, 21:34 #8
castaway, тут уж кому как. Я посчитал, что так достаточно понятно.
1
NeonLost
Пес войны
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
25.07.2014, 20:35 #9
Цитата Сообщение от castaway Посмотреть сообщение
статическая выделяется в compile-time
надеюсь ты пошутил
0
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
25.07.2014, 20:48 #10
Цитата Сообщение от NeonLost Посмотреть сообщение
надеюсь ты пошутил
А что тебе не нравится? Если сильно к терминологии не придираться, то примерно так оно и есть
0
Malenych
0 / 0 / 0
Регистрация: 02.05.2013
Сообщений: 47
15.09.2014, 18:26 #11
А вообще есть ли смысл динамически инициализировать одну переменную?
Например:
C++
1
int *p = new int;
И если да, то в каких участках программы лучше применять статические переменные, а в каких динамические?
0
gng
644 / 490 / 133
Регистрация: 08.09.2013
Сообщений: 1,326
15.09.2014, 18:48 #12
Цитата Сообщение от Malenych Посмотреть сообщение
А вообще есть ли смысл динамически инициализировать одну переменную?
Например:
Код C++
1
int *p = new int;
Например, в учебных целях. Для демонстрации работы оператора new.
Цитата Сообщение от Malenych Посмотреть сообщение
И если да, то в каких участках программы лучше применять статические переменные, а в каких динамические?
В большинстве случаев используют автоматические переменные (хранятся на стеке).

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

Динамические в куче (new или malloc) - если по логике задачи массивы данных динамически появляются и исчезают. Или размер неизвестен на стадии компиляции.
1
Malenych
0 / 0 / 0
Регистрация: 02.05.2013
Сообщений: 47
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
644 / 490 / 133
Регистрация: 08.09.2013
Сообщений: 1,326
15.09.2014, 19:17 #14
Цитата Сообщение от Malenych Посмотреть сообщение
Может быть в рамках производительности будет легче создать динамическую переменную value
В данном случае вы только потеряете и в производительности (вызов выделения памяти) , и в памяти (указатель + сама переменная, кроме того ОС обычно выделяет память с запасом).
Автоматическая переменная здесь лучший выбор. После завершения функции память освободится.
1
Scrooge McDuck
Заблокирован
15.09.2014, 19:19 #15
Цитата Сообщение от castaway Посмотреть сообщение
статическая выделяется в compile-time
Ты хочешь сказать, что как я скомпилировал программу, в неё забился кусочек памяти моего компа и теперь всегда там сидит ? Память под статические переменные выделяется во время запуска программы.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2014, 19:19
Привет! Вот еще темы с ответами:

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

В каких случаях необходимо включать include string - C++
В каких случаях необходимо использовать инструкцию препроцессора #include &lt;string&gt;? Раньше я думал, что это необходимо всякий раз, как я...

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.09.2014, 19:19
Ответ Создать тему
Опции темы

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