Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 584
от 06.09.2006, 15:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 375, Экспертов: 66
В номере:Вопросов: 2, Ответов: 2


Вопрос № 53958: Мир вам, уважаемые эксперты! Как известно, в дельфи есть возможность задавать минимальный и максимальный размер стека директивами компилятора {$MAXSTACKSIZE number} А можно ли задавать их не статически (при компиляции), а динамически (т.е. по...
Вопрос № 53961: Уважаемые эксперты, как можно с помощью WinSock2 заставить программу делать соединение Proxy каскад? ...

Вопрос № 53.958
Мир вам, уважаемые эксперты!
Как известно, в дельфи есть возможность задавать минимальный и максимальный размер стека директивами компилятора {$MAXSTACKSIZE number}
А можно ли задавать их не статически (при компиляции), а динамически (т.е. по ходу выполнения программы) ? Или может быть устанавливать сам размер стека ?
Если нельзя, то чем чревата установка большого стека (допустим, гигабайт) при компиляции ?
С уважением, Лука.
P.S. У меня рекурсивная функция с потенциально многократным само-вызовом.
Отправлен: 01.09.2006, 08:40
Вопрос задал: Лука (статус: 6-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: sir henry
Здравствуйте, Лука!
Вопрос более чем странный. Дело в том, что все что в тексте программы начинается с фигурной скобки и знака доллара, и в частности {$MAXSTACKSIZE, это все директива компилятору и действует только во время компиляции программы, а не во время ее исполнения. Во время выполнения пользуются другими способами выделения памяти, но стек при этом не трогают.
Установка большого значения стека чревато замедлением работы программы. Каждой программе выделяется адресное пространство в 4ГБ - 2 для данных и 2 для кода. Все что не умещается в оперативной памяти, то сбрасывается операционкой на диск, в своп-файл. Работа с диском как минимум в 1000 раз медленнее, чем работа с оперативной памятью. Можно еще предположить, что размер Вашего своп-файла статический и он мал. Тогда программа зависнет.
Проблема скорее в том, что нужно хорошенько подумать над способом реализации алгоритма - стоит ли его делать рекурсивным или итерационным. Необходимо записать все условия вызова и оценить количество вызовов в том или ином случае.
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 01.09.2006, 09:03
Оценка за ответ: 4
Комментарий оценки:
Ответ тоже несколько странный :))
Я почему-то думал, что директивы компилятора влияют на получаемый ехе и чрез это действуют и при исполнении :))
Ну да не в том дело.
Есть три величины - минимальный размер стека, максимальный и, собственно, текущий.
Первые два задаются при компиляции директивами.
Если верить справке, стек сам шагами увеличивается (если не хватает) от минимального, но не может превысить максимальный (вызывает исключение... должен вызывать, а у меня почему-то просто прекращает выполнение...)
Есть рекурсивный алгоритм, т.е. стек забивается передаваемыми в функцию переменными и адрессами возврата (или я заблуждаюсь?). В идеале было бы установить стек сразу на нужную величину (она будет зависеть от исходных данных, я могу приблизительно п осчитать ее програмно). Но если это невозможно, остается поставить максимум побольше и пусть стек растет сам. Встает вопрос не опасно ли будет писать {$MAXSTACKSIZE гиг}, зачем его вообще ограничивают сверху ?
Простите, если нечетко выражаюсь.


Вопрос № 53.961
Уважаемые эксперты, как можно с помощью WinSock2 заставить программу делать соединение Proxy каскад?
Отправлен: 01.09.2006, 09:07
Вопрос задал: Blajimir (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: АРистов Николай
Здравствуйте, Blajimir!
воспользуйся лучше freecap (freecap.ru) либо proxifer. Программы полуавтоматический.
Ответ отправил: АРистов Николай (статус: 1-ый класс)
Ответ отправлен: 01.09.2006, 11:04
Оценка за ответ: 1


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.36 от 06.09.2006
Яндекс Rambler's Top100

В избранное