ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #31  
Старый 25.04.2010, 19:25
GhostOnline
Участник форума
Регистрация: 20.12.2008
Сообщений: 277
Провел на форуме:
828081

Репутация: 84
По умолчанию

залей куда нибудь свой код, и модуль с формой тоже!
 
Ответить с цитированием

  #32  
Старый 25.04.2010, 19:44
Flame of Soul
Участник форума
Регистрация: 25.05.2007
Сообщений: 290
Провел на форуме:
1740746

Репутация: 435
Отправить сообщение для Flame of Soul с помощью MSN
По умолчанию

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..
 
Ответить с цитированием

  #33  
Старый 25.04.2010, 20:12
AlexTheC0d3r
Постоянный
Регистрация: 25.07.2008
Сообщений: 454
Провел на форуме:
1229135

Репутация: 425
Отправить сообщение для AlexTheC0d3r с помощью ICQ
По умолчанию

Цитата:
Сообщение от 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?
 
Ответить с цитированием

  #34  
Старый 25.04.2010, 21:55
Flame of Soul
Участник форума
Регистрация: 25.05.2007
Сообщений: 290
Провел на форуме:
1740746

Репутация: 435
Отправить сообщение для Flame of Soul с помощью MSN
По умолчанию

Цитата:
Сообщение от 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-do
    if (
i mod 2 0then begin memo1.Lines.Add('a'end;
end
во первых доказывает нам что VCL вызывает подсчет в каждой итерации, а во вторых указывает на то что количество элементов в теле цикла при его воздействии на Memo меняется и учитывается, что тоже иногда необходимо. (i mod 2 = 0) использовано только чтобы избежать зацикливания.

Ну и банально даже то что при инкрементации переменной цикла i на более высокое значение компилятор не использует Флаг нуля (ZF) а просто сравнивает значение с 0. Семантически это не верно, но я не вижу в этом особого греха.

Последний раз редактировалось Flame of Soul; 25.04.2010 в 22:00..
 
Ответить с цитированием

  #35  
Старый 25.04.2010, 22:06
AlexTheC0d3r
Постоянный
Регистрация: 25.07.2008
Сообщений: 454
Провел на форуме:
1229135

Репутация: 425
Отправить сообщение для AlexTheC0d3r с помощью ICQ
По умолчанию

То, использовать второй пример в цикле for не имеет смысла это понятно, но вот насчет введения новой переменной для хранения неизменяемого математического выражения спорно...

Кстати у компилятора delphi достаточно хороший встроенный оптимизатор
 
Ответить с цитированием

  #36  
Старый 25.04.2010, 22:26
Flame of Soul
Участник форума
Регистрация: 25.05.2007
Сообщений: 290
Провел на форуме:
1740746

Репутация: 435
Отправить сообщение для Flame of Soul с помощью MSN
По умолчанию

Прошу прощения у модераторов за отход от основной темы.
Цитата:
но вот насчет введения новой переменной для хранения неизменяемого математического выражения спорно...
ну во первых оно изменяемо, тут я с вами не согласна, можно рассмотреть ситуации когда количество строк велико и у нас автоперенос по ширене строк, тогда при изменении размеров формы количество строк изменится и цикл закончится в тот момент когда первый раз условие будет нарушено, однако при выносе в переменную - этот фактор не повлияет и количество строк уже не будет совпадать с тем что в переменно, что собственно и может вызвать сбой в программе.

Во вторых, программа не застрахована от посылке сообщений из вне, так как Memo тоже имеет handle что означает что количество строк в ней может измениться если у нас есть пересылка данных с другого потока во время выполнения цикла, а если данных много то и цикл выполняется дискретно,соответственно - порциями которыми выделяет ОС под процесс, ну и что я Вам рассказываю, вы ведь я думаю тоже хороший программист и Сами понимаете это, то есть фактор из вне у нас не повлияет на структуру если count будет считаться в каждой итерации.

Однако если вынести за переменную то мы можем схлопотать 2 эксепшена на основании чего можно заключить то что есть возможность внедрения эксплойта в систему, однако для посылке сообщения у нас естественно должны быть соответствующие права. Не могу так сказать на вскидку насколько серьезная это погрешность но факт того что она есть радует.

Ну и IDA Pro Free совершенно бесплатна как и Оленька, так что отладчик и проверяйте))). А по поводу того что в дельфинчике довольна хороший оптимизатор, не спорю так и есть, но люблю я эту IDE и компилятор не за это)
 
Ответить с цитированием

  #37  
Старый 25.04.2010, 23:41
1n0y
Участник форума
Регистрация: 09.05.2009
Сообщений: 186
Провел на форуме:
1682814

Репутация: 102
Отправить сообщение для 1n0y с помощью ICQ
По умолчанию

Цитата:
Сообщение от 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)
 


Быстрый переход




ANTICHAT.XYZ