ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

25.04.2010, 19:25
|
|
Участник форума
Регистрация: 20.12.2008
Сообщений: 277
Провел на форуме: 828081
Репутация:
84
|
|
залей куда нибудь свой код, и модуль с формой тоже!
|
|
|

25.04.2010, 19:44
|
|
Участник форума
Регистрация: 25.05.2007
Сообщений: 290
Провел на форуме: 1740746
Репутация:
435
|
|
PHP код:
procedure tnew.getln;
var
i,t:integer;
begin
t:=form1.memo1.lines.count-1;
for i:=0 to t do
form1.memo2.lines.add(form1.idhttp1.get(form1.memo1.lines[i]));
end;
так компактнее и побыстрее, хотя по факту маловажно.
Последний раз редактировалось Flame of Soul; 25.04.2010 в 19:46..
|
|
|

25.04.2010, 20:12
|
|
Постоянный
Регистрация: 25.07.2008
Сообщений: 454
Провел на форуме: 1229135
Репутация:
425
|
|
Сообщение от Flame of Soul
PHP код:
procedure tnew.getln;
var
i,t:integer;
begin
t:=form1.memo1.lines.count-1;
for i:=0 to t do
form1.memo2.lines.add(form1.idhttp1.get(form1.memo1.lines[i]));
end;
так компактнее и побыстрее, хотя по факту маловажно.
чем объясняется ввод новой переменной t?
|
|
|

25.04.2010, 21:55
|
|
Участник форума
Регистрация: 25.05.2007
Сообщений: 290
Провел на форуме: 1740746
Репутация:
435
|
|
Сообщение от AlexTheC0d3r
чем объясняется ввод новой переменной t?
Delphi не производит разворачивания циклов, как и вынесение инвариантного кода за пределы цикла. То есть в компиляторе нет как такового оптимизатора, вот я и посчтитала что более рационально будет именно так, потому что метод:
PHP код:
for i:=0 to memo1.lines.count – 1 do
будет вызываться в каждой итерации, то есть каждый раз будет подсчитывать количество элементов, а если у нас там элементов несколько тысяч, допустим 2000 строк, собственно не так уж и много, как и посчитать количество их элементов, но так как тип используемый там идет как string а не char и заблогонамеренно неизвестна длина строк, пересчет происходить будет в каждой итерации. Даже если взять что memo1.lines.count было бы постоянным и пересчета не производилось, то в условии у нас стоит математическое выражение memo1.lines.count -1
ну соответственно чтобы не заставлять вести лишние подсчеты и желательно вынести количество элементов в отдельную переменную, если конечно оно у нас постоянно и не меняется в теле цикла на произвольное, допустим код вида:
PHP код:
var i:integer;
begin
for i:=0 to Memo1.Lines.Count-1 do
if (i mod 2 = 0) then begin memo1.Lines.Add('a') end;
end;
во первых доказывает нам что VCL вызывает подсчет в каждой итерации, а во вторых указывает на то что количество элементов в теле цикла при его воздействии на Memo меняется и учитывается, что тоже иногда необходимо. (i mod 2 = 0) использовано только чтобы избежать зацикливания.
Ну и банально даже то что при инкрементации переменной цикла i на более высокое значение компилятор не использует Флаг нуля (ZF) а просто сравнивает значение с 0. Семантически это не верно, но я не вижу в этом особого греха.
Последний раз редактировалось Flame of Soul; 25.04.2010 в 22:00..
|
|
|

25.04.2010, 22:06
|
|
Постоянный
Регистрация: 25.07.2008
Сообщений: 454
Провел на форуме: 1229135
Репутация:
425
|
|
То, использовать второй пример в цикле for не имеет смысла это понятно, но вот насчет введения новой переменной для хранения неизменяемого математического выражения спорно...
Кстати у компилятора delphi достаточно хороший встроенный оптимизатор
|
|
|

25.04.2010, 22:26
|
|
Участник форума
Регистрация: 25.05.2007
Сообщений: 290
Провел на форуме: 1740746
Репутация:
435
|
|
Прошу прощения у модераторов за отход от основной темы.
но вот насчет введения новой переменной для хранения неизменяемого математического выражения спорно...
ну во первых оно изменяемо, тут я с вами не согласна, можно рассмотреть ситуации когда количество строк велико и у нас автоперенос по ширене строк, тогда при изменении размеров формы количество строк изменится и цикл закончится в тот момент когда первый раз условие будет нарушено, однако при выносе в переменную - этот фактор не повлияет и количество строк уже не будет совпадать с тем что в переменно, что собственно и может вызвать сбой в программе.
Во вторых, программа не застрахована от посылке сообщений из вне, так как Memo тоже имеет handle что означает что количество строк в ней может измениться если у нас есть пересылка данных с другого потока во время выполнения цикла, а если данных много то и цикл выполняется дискретно,соответственно - порциями которыми выделяет ОС под процесс, ну и что я Вам рассказываю, вы ведь я думаю тоже хороший программист и Сами понимаете это, то есть фактор из вне у нас не повлияет на структуру если count будет считаться в каждой итерации.
Однако если вынести за переменную то мы можем схлопотать 2 эксепшена на основании чего можно заключить то что есть возможность внедрения эксплойта в систему, однако для посылке сообщения у нас естественно должны быть соответствующие права. Не могу так сказать на вскидку насколько серьезная это погрешность но факт того что она есть радует.
Ну и IDA Pro Free совершенно бесплатна как и Оленька, так что отладчик и проверяйте))). А по поводу того что в дельфинчике довольна хороший оптимизатор, не спорю так и есть, но люблю я эту IDE и компилятор не за это)
|
|
|

25.04.2010, 23:41
|
|
Участник форума
Регистрация: 09.05.2009
Сообщений: 186
Провел на форуме: 1682814
Репутация:
102
|
|
Сообщение от Flame of Soul
ну во первых оно изменяемо
нет, у меня по условию в мемо во время проверки нечего не дописывается\удаляется. но за внимание - спасибо 
|
|
|
|
 |
|
Похожие темы
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
Установка Indy 10.5.6
|
НTL |
С/С++, C#, Delphi, .NET, Asm |
10 |
20.12.2009 09:15 |
|
Indy 10 - проблема
|
mailbrush |
С/С++, C#, Delphi, .NET, Asm |
9 |
25.07.2009 16:56 |
|
[Delphi] Threads (проблема)
|
Flenov |
С/С++, C#, Delphi, .NET, Asm |
11 |
17.03.2009 08:45 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|