![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() |
Nolik |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 6 Пол: Мужской Реальное имя: Илья Репутация: ![]() ![]() ![]() |
С точки зрения скорости исполнения процедуры, как правильнее организовать корректную работу процедуры с большим количеством изменяемых переменных?
1. Сформировать Class, и содержать в нем все необходимые переменные. Передавать в процедуру в качестве параметра Class. Теперь процедура работает с переменными, содержащимися в Class: Код MyProcedure( Class:MyClass ); begin Class.var1 := Class.var2 + Class.var3; End; 2. Определить переменные в начале программы НО НЕ передавать их в MyProcedure в качестве параметров, а позволить процедуре работать с внешними (для нее) переменным: Код var1; var2…….varN MyProcedure(); begin var1:= var2 + var3; End; |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Под какими компилерами будет твоя программа компилироваться? (Кроме твоего "www.wld3.com", который очень странно обрабатывает стандартные конструкции языка...
![]() |
Nolik |
![]()
Сообщение
#3
|
Группа: Пользователи Сообщений: 6 Пол: Мужской Реальное имя: Илья Репутация: ![]() ![]() ![]() |
очень странно обрабатывает стандартные конструкции языка... ![]() Проверил еще раз. Оба способа передачи объекта в подпрограмму Код procedure Test( Cont :Container ) и Код procedure Test( var Cont :Container ) Работают одинаково... Код Type Container = class( TObject ) private protected public str :string; end; procedure Test( Cont :Container ); begin Cont.str:='Test'; end; var Cont :Container; Cont:=Container.Create; Print(Cont.str); Test(Cont); Print(Cont.str); Все-таки у меня остается не решенным вопрос: каким контейнером лучше воспользоваться в моем случае, с точки зрения скорости обращения к переменным, ну и корректности Pascal в целом… Илья. |
hardcase |
![]()
Сообщение
#4
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
Все-таки у меня остается не решенным вопрос: каким контейнером лучше воспользоваться в моем случае, с точки зрения скорости обращения к переменным, ну и корректности Pascal в целом Как сказал Вольво зашей все данные в отдельный класс, а в нём определи методы - твои процедуры и функции. -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
Nolik |
![]()
Сообщение
#5
|
Группа: Пользователи Сообщений: 6 Пол: Мужской Реальное имя: Илья Репутация: ![]() ![]() ![]() |
У меня программа состоит из ОДНОГО главного цикла, в котором находится длинный список подпрограмм:
Код FOR i:=0 to Max do begin Procedure1(); Procedure2(); ...... …… ProcedureN(); END; И даже работа с файлами производится из процедур. Таким образом, абсолютно ВСЕ переменные, определенные (и заданные) в начале кода, оказываются внешними по отношению к процедурам ![]() Вот и получается что варианта 2: 1. Позволить процедурам работать с внешними переменными: Все прозрачно + НЕ требуется выделение дополнительной оперативной памяти. Но возникает вопрос о корректности с точки зрения языка Pascal в целом. 2. Собрать мегазборку переменных Type=Record и передавать ее в процедуры. В этом случае с точки зрения Pascal все вроде как «тип-топ», но потребуется выделение дополнительной памяти, и возможно снизится общая скорость работы программы. Оба варианта работают одинаково, в том смысле что вычислительный результат совпадает. Во время процесса оптимизации стратегии, программа запускается несколько сот/тысяч раз в цикле, что требует оптимизации выделения памяти и сокращения общего времени работы программы. Поскольку вся наша жизнь есть сплошной компромисс, то вопрос к Гуру от Pascal такой: Какой вариант предпочесть??? Низкий поклон за помощь. Илья. Сообщение отредактировано: Nolik - 27.01.2006 6:53 |
![]() ![]() |
![]() |
Текстовая версия | 22.07.2025 12:16 |