Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

С++. Чем отличается использование динамического массива от обычного?

Алексей Щеблыкин Ученик (149), закрыт 5 лет назад
int a[8] и int *a = new int [8]
Кроме того что один использует спек, а другой кучу, что меняется?
Киньте ссылку на статью или видео, а если не лень объясните пожалуйста сами.
Заранее огромное спасибо
Лучший ответ
Krab Bark Искусственный Интеллект (296495) 5 лет назад
Из кучи можно взять гораздо больше памяти, чем из стека, поэтому массив может быть большего размера - раз.
Для обычного массива работают sizeof и цикл по диапазону, для динамического нет - два.
Размер динамического массива может быть задан в ходе работы программы, обычного нет - три.
Для многомерных обычных массивов их данные в памяти лежат последовательно, для динамических это обычно не соблюдается - четыре.
Алексей ЩеблыкинУченик (149) 5 лет назад
Спасибо
Остальные ответы
H-p A Просветленный (47009) 5 лет назад
Меняется то, что несмотря на преимущества перед обычным (которые с удовольствием опишут программисты старой школы) динамический массив использовать нежелательно. У динамического большой недостаток - надо очищать память. И еще мелких несколько наберётся.
Поэтому в современных программах вместо него стараются использовать std::vector или другие контейнеры STL и Boost. А про него даже объяснять лень.
Алексей ЩеблыкинУченик (149) 5 лет назад
спасибо.
ivtst1 Просветленный (30511) 5 лет назад
Обычный выделяется на стеке, а стек ограничен по размеру (Для ПК 1Мб по умолчанию). Динамический массив выделяется в виртуальной памяти и ограничен только разрядностью машины - 4Гб для 32х-разрядной, 2^64 для 64. Кроме того, динамическую память можно освободить в любой момент.

В конкретном случае (int a[8] и int *a = new int [8]), на первое выделение потребуется 8 байт памяти, на второе на несколько байт больше, т. к. по адресам перед массивом будет служебная информация.
Похожие вопросы