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

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

Войти
Регистрация
Восстановить пароль
 
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
#1

Динамические массивы на стеке - C++

05.09.2013, 21:36. Просмотров 1126. Ответов 5
Метки нет (Все метки)

Почему не придумали ещё язык программирования, который в точности повторял бы С++, но содержал дополнительно всего одну функцию "выделение массива переменного размера". Причём выделение его на стеке, а не в куче!
C++
1
2
3
int size;
std::cin>>size;
int mas[size];
При этом все заботы по выделению/освобождению памяти компилятор брал бы на себя также, как он делает с локальными переменными!
То есть брал бы и уменьшал stack pointer на заданное число байт!
Он же по сути так и делает при вызове функции с локальными переменными. Но в нашем случае, он бы мог делать это не только в начале функции, при инициализации локальных(auto) переменных, а в произвольный момент в функции по требованию программиста!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.09.2013, 21:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Динамические массивы на стеке (C++):

Динамические массивы и функции. Динамические массивы. - C++
Дана матрица 6х8 целого типа. Создать одномерный массив, содержащий элементы матрицы, кратные числу, введенному с клавиатуры.

Указатели и массивы. Индексация с помощью указателей. Передача массивов в функции. Динамические массивы (обработка матриц) - C++
Для каждого элемента , bij, i= 1,...,n , j=1,...,n определяется свой многоугольник местонахождением соответствующего элемента aij (см....

Динамические массивы - C++
1. Сформировать динамический одномерный массив, заполнить его случайными числами и вывести на печать 2. Выполнить указанное в варианте...

Динамические массивы - C++
Доброго времени суток! Везде написано, что динамический массив - это массив, размер которого может меняться во время исполнения...

Динамические массивы - C++
Помогите пожалуйста решить. Только матрицы надо обязательно через динамические массивы задавать( я ничего в этом не понимаю(

Динамические массивы. - C++
Помогите пожалуйста сделать задачку. В ней должно быть меню, и использованы динамические массивы. В меню 3 пункта: 1. Преобразуйте...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
05.09.2013, 21:51 #2
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Почему не придумали ещё язык программирования, который в точности повторял бы С++, но содержал дополнительно всего одну функцию "выделение массива переменного размера". Причём выделение его на стеке, а не в куче!
Это есть в С99 и в gnu экстеншенах (может еще где-то, не знаю). Т.е. используя компилятор gnu ты можешь свободно это применять. Фича называется VLA (variable length array).

Добавлено через 1 минуту
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
C++
1
2
3
int size;
std::cin>>size;
int mas[size];
При этом все заботы по выделению/освобождению памяти компилятор брал бы на себя также, как он делает с локальными переменными!
вообще-то это крайне не безопасная вещь (потому и не прижилась), стек по объему гораздо меньше, чем heap (по дефолту), поэтому его легко поломать.

Добавлено через 2 минуты
с вражеской вики
Programming languages that support VLAs include Ada, Algol 68 (for non-flexible rows), APL, C99 (and subsequently in C11 relegated to a conditional feature which implementations aren't required to support;[1] on some platforms, could be implemented previously with alloca() or similar functions) and C# (as unsafe-mode stack-allocated arrays), COBOL, Fortran 90, J.
0
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
05.09.2013, 22:40 #3
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Почему не придумали ещё язык программирования, который в точности повторял бы С++, но содержал дополнительно всего одну функцию "выделение массива переменного размера". Причём выделение его на стеке, а не в куче!
Этот язык есть. Называется C++. google://alloca() Кроме того, сюда подходит любой язык, чей компилятор проводит escape analysis (жавошарпы в первую очередь) и может на стеке выделять вообще всё, а не только массивы.
0
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
05.09.2013, 22:50 #4
При этом все заботы по выделению/освобождению памяти компилятор брал бы на себя также, как он делает с локальными переменными!
Стек ведь не резиновый.

Добавлено через 4 минуты
не только в начале функции
а в произвольный момент в функции по требованию программиста!
Выделение идёт в начале блока, а не функции.
0
zer0mail
2334 / 1960 / 192
Регистрация: 03.07.2012
Сообщений: 7,029
Записей в блоге: 1
06.09.2013, 09:38 #5
Смотрел на VS2010 ассемблерный код - никакого выделения в начале блока не обнаружил.
Может, не по глазам...
0
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,370
06.09.2013, 11:27 #6
А VS2010 VLA и не поддерживает. Это исключительно гнутое расширение, пришедшее из C99.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2013, 11:27
Привет! Вот еще темы с ответами:

Динамические массивы - C++
Объясните пожалуйста что такое динамические массивы. Это массивы с не константным количеством элементов? Если так, то как их объявлять?

Динамические массивы - C++
С использованием динамических массивов, вводя размер массива с клавиатуры. Используя имя массива как указатель, и применяя адресную...

динамические массивы - C++
помогите, пожалуйста, написать код в с++. (пример кода) Дана матрица размера A * B. Вывести ее элементы в следующем порядке: первый...

Динамические массивы - C++
Здравствуйте. Задание следующее: Сформировать динамический одномерный массив, заполнить его случайными числами и вывести на печать. ...


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

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

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