Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2008, 20:13   #1
Voyager
Новичок
Джуниор
 
Регистрация: 09.04.2008
Сообщений: 1
Вопрос Массивы переменного размера в стеке

Добрый день!

В С/С++ если на этапе компиляции не известен размер массива, то его приходится создавать в динамической памяти. А ведь как хотелось писать что-то типа:

void function( /* args,… */ int size_of_array)
{
int array [size_of_array];
/* что-то делаем */
}
И вроде бы в Паскале такая вещь есть. Но почему нет в С/С++? Чтобы сделать это, компилятору надо совсем не много: он должен сгенерировать не такой вот код:
add esp, 32
а другой, типа:
mov eax, size_of_stack
add esp, eax
где size_of_stack – необходимый размер стека, учитывающий, что нужно хранить адрес возврата, значение esp, аргументы, локальные переменные и массив желаемого размера.
Но как это сделать, пусть даже и с использованием директивы “asm”? Была мысль сделать это с помощью функций с переменным количеством аргументов – это позволяет варьировать размер стека. Но это тупиковый путь: все равно в программе должен быть вызов такой функции с явным указанием всех аргументов, и для резервирования места под массив int [256], нужно вызвать функцию с 256 аргументами…
Но как тогда?
Voyager вне форума Ответить с цитированием
Старый 09.04.2008, 20:17   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

а так не пойдет:
int *array = new int[size_of_array];
pu4koff вне форума Ответить с цитированием
Старый 10.04.2008, 00:03   #3
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Voyager Посмотреть сообщение
Чтобы сделать это, компилятору надо совсем не много: он должен сгенерировать не такой вот код:
add esp, 32
а другой, типа:
mov eax, size_of_stack
add esp, eax
где size_of_stack – необходимый размер стека, .........
Слава Всевышнему, что ни один компилятор так не делает. А для создания динамических массивов используется динамическая же память. Плюс для этого есть куча готовых классов, если речь про "++".
B_N вне форума Ответить с цитированием
Старый 10.04.2008, 11:33   #4
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
а так не пойдет:
int *array = new int[size_of_array];
Автор ясно сказал: "в стеке".
Carbon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Два размера фаила Иллидан Безопасность, Шифрование 1 09.03.2008 00:13
Уменьшение размера ехе файлов Terran Общие вопросы Delphi 20 23.01.2008 23:03
Как определить размера картинки Kocapb Общие вопросы C/C++ 7 18.11.2007 16:06
Увеличение размера поля kayman Общие вопросы Delphi 6 16.10.2007 22:35