Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

какие накладные расходы у try except end?


Страницы:   1 2 3 4 5 6

Jolik ©   (2008-03-28 15:50:00) 

Господа!

Может ли кто просветить (хотя бы оценочно) насколько функция с try except end медленне функции без нее в случае НЕвозникновения исключения.
Ведь компилятор делает какие-то телодвижения при входе в процедуру если там есть блок try except end? Да и при выходе наверное...

Заранее благодарен!


Сергей М.   (2008-04-04 11:30:00) [61]


> В программе должно быть все красиво


У тебя искаженные представления о красоте.


> Не должно быть ничего лишнего


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


Тыщ   (2008-04-04 11:27:00) [62]

clickmaker ©   (04.04.08 11:23) [39]

Как раз таки я и пытаюсь жонглировать паскалевскими строками, а не нуль-терминированными.
Использую встроенный в Windows менеджер памяти (HeapAlloc, HeapFree), он не вызывает исключения, если его специально не просить.


clickmaker   (2008-04-04 11:23:00) [63]


> [35] Тыщ   (04.04.08 11:07)

уверен, что жонглирование нуль-терминированными строками, с постоянным перераспределением памяти компенсирует избавление от исключений?
готов написать свой более оптимальный менеджер памяти, чем борландовый?


Тыщ   (2008-04-04 11:23:00) [64]

Сергей М. ©   (04.04.08 11:19) [38]

В программе должно быть все красиво - и размер, и скорость, и структура, внешняя и внутренняя.
Не должно быть ничего лишнего.
Если программирование искусством считать, конечно.
А для себя я считаю именно так.


Сергей М.   (2008-04-04 11:19:00) [65]

Ты объясни, на чем ты хочешь сэкономить, избавившись от сабжа ?
На размере исп.модуля ?
На локальной/сквозной производительности приложения ?


Сергей М.   (2008-04-04 11:15:00) [66]

Нелогично другое - стремление к блохоловству, аргументированное лишь ничего не значащим "пишу на чистом ВинАПИ"


Сергей М.   (2008-04-04 11:13:00) [67]

Отвечаю - не пользовать конструкции вида [28].


Тыщ   (2008-04-04 11:07:00) [68]

Сергей М. ©   (04.04.08 11:03) [34]

> И чем он тебе помешал ?

Давайте все-таки отвечать на заданный вопрос - "как избавиться от блока обработки исключений", а не такой вопрос - "чем тебе мешает X?"
Если бы он мне не мешал, я бы не задавал свой вопрос, логично?


Сергей М.   (2008-04-04 11:03:00) [69]


> в главном begin end. все равно будет


И чем он тебе помешал ?
Этот блок "охватит" всюработу приложения, один раз за всю его жизнь, что никак не отразится на сквозной его производительности.


Сергей М.   (2008-04-04 10:58:00) [70]

см. [30]


Тыщ   (2008-04-04 10:58:00) [71]

Сергей М. ©   (04.04.08 10:56) [30]

Ну да, в функции TForm1.Button2Clickне будет этого блока, а в главном begin end.все равно будет.


Сергей М.   (2008-04-04 10:56:00) [72]

var
 s: string;

procedure TForm1.Button2Click(Sender: TObject);
begin
 s := '%PATH%';
end;

Удивись - никаких блоков компилятор не сгенерировал.


Тыщ   (2008-04-04 10:56:00) [73]

Сергей М. ©   (04.04.08 10:54) [29]

Приведите пример, пожалуйста.


Сергей М.   (2008-04-04 10:54:00) [74]


> виновата строка с var


Далеко не всегда.


> В обоих случаях будет генерироваться этот блок


Вовсе не факт.


Тыщ   (2008-04-04 10:43:00) [75]

Сергей М. ©   (04.04.08 10:28) [27]

Нет, виновата строка с var:

var s:string;
begin
end.


Даже тут генерируется этот блок...

Спасибо за объяснение.

Итак, строку можно вернуть либо функцией, либо процедурой с var string.
В обоих случаях будет генерироваться этот блок.

Есть ли еще способы вернуть строку (AnsiString)?


Сергей М.   (2008-04-04 10:28:00) [76]


> Смотрю в самое начало кода и вижу mov fs:[eax],esp . Кто
> врет?


ты, разумеется)

Этот блок появился по факту присутствия строчки

s:='%PATH%'

но отнюдь не строчки

ExpandEnvironmentStrings2(s);

которую можно смело закомментировать, чтобы убедиться в том, что блок не исчез.


> в каких еще случаях генерируется этот блок?


Во всех случаях когда компилятор берет на себя ответственность за безусловное освобождение ресурсов, распределенных под данные с управляемым временем жизни, при потенциальной возможности исключений.


Тыщ   (2008-04-04 10:19:00) [77]

Сергей М. ©   (04.04.08 10:10) [25]

>> У меня заключил
> Врешь и не моргаешь)

Смотрю в самое начало кода и вижу mov fs:[eax],esp. Кто врет?

> Или не понимаешь в принципе, какому конкретно программному действию этот блок соответствует.

Случай,
> если возвращаемое значение есть LargeString
мы убрали, в каких еще случаях генерируется этот блок?
Не затруднит рассказать или хотя бы дать ссылку?


Сергей М.   (2008-04-04 10:10:00) [78]


> У меня заключил


Врешь и не моргаешь)
Или не понимаешь в принципе, какому конкретно программному действию этот блок соответствует.


Тыщ   (2008-04-04 10:06:00) [79]

Сергей М. ©   (04.04.08 9:56) [23]

Честно удивлюсь, если не заключил. У меня заключил.

Код:
uses Windows;
{$APPTYPE CONSOLE}
procedure ExpandEnvironmentStrings2(var s:string);
var Buffer:pchar;
   Size:cardinal;
begin
 Size:=ExpandEnvironmentStrings(pchar(s),nil,0);
 GetMem(Buffer,Size);
 Size:=ExpandEnvironmentStrings(pchar(s),Buffer,Size);
 SetString(s,Buffer,Size-1);
 FreeMem(Buffer);
end;

procedure Write_(var s:string);
var Temp:dword;
begin
 WriteFile(GetStdHandle(STD_OUTPUT_HANDLE),s[1],Length(s),Temp,nil);
end;

var
 s:string;
begin
 s:='%PATH%';
 ExpandEnvironmentStrings2(s);
 Write_(s);
end.


Сергей М.   (2008-04-04 09:56:00) [80]


> О чем и говорилось в [5]


В [5] не было конкретностей, они появились в [6].

А вот теперь измени декларацию своей ф-ции на следующую процедуру:

procedure ExpandEnvironmentStrings2(var s:string);


Удивись - компилятор не заключил вызов процедуры в try-блок !

Теперь думай над происходящим)


Страницы:   1 2 3 4 5 6

Наверх

Титульная страница Поиск, карта сайта Написать письмо