|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.04.2008, 20:13 | #1 |
Новичок
Джуниор
Регистрация: 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 аргументами… Но как тогда? |
09.04.2008, 20:17 | #2 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
а так не пойдет:
int *array = new int[size_of_array]; |
10.04.2008, 00:03 | #3 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
Слава Всевышнему, что ни один компилятор так не делает. А для создания динамических массивов используется динамическая же память. Плюс для этого есть куча готовых классов, если речь про "++".
|
10.04.2008, 11:33 | #4 |
JAVA BEAN
Участник клуба
Регистрация: 22.04.2007
Сообщений: 1,329
|
Автор ясно сказал: "в стеке".
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Два размера фаила | Иллидан | Безопасность, Шифрование | 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 |