Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2009.02.01;
Скачать: [xml.tar.bz2];

Вниз

какие накладные расходы у try except end?   Найти похожие ветки 

 
Сергей М. ©   (2008-04-04 14:22) [80]


> Например?


Дык тот же TObject и иже с ним потроха занимают немало места !
Некузяво как-то) .. Выбрей и его тож)


 
Тыщ   (2008-04-04 14:25) [81]

Сергей М. ©   (04.04.08 14:20) [79]

> На момент, когда я упомянул _IntfClear, предполагалось что ты пользуешь штатный system.dcu, а не выбритый лоскутами)

Странно, добавил _IntfClear в System.pas, а он все равно не прикомпилировался.

Сергей М. ©   (04.04.08 14:22) [80]

> Дык тот же TObject и иже с ним потроха занимают немало места !

Только в system.pas, не в конечной программе, если не используется.


 
Сергей М. ©   (2008-04-04 14:41) [82]


> Странно, добавил _IntfClear в System.pas, а он все равно
> не прикомпилировался


Странно, я заведомо использую блоки try..finally
c заведомо штатным system.dcu, а в map"е процедурой идентификатором _HandleFinally даже не пахнет.

Наверно тоже не "прикомпилировался")

Вот ведь чудеса в решете - кода нет, а он успешно работает)


 
Тыщ   (2008-04-04 14:51) [83]

Сергей М. ©   (04.04.08 14:41) [82]

> в map"е процедурой идентификатором _HandleFinally даже не пахнет.

@HandleFinally там есть.


 
Тыщ   (2008-04-04 14:58) [84]

Во, обработку исключений победил!

uses Windows;
{$APPTYPE CONSOLE}

procedure LStrFromPCharLen(Dest: PAnsiString; Source: PAnsiChar; Length: Integer);
asm
 jmp System.@LStrFromPCharLen
end;

procedure LStrClr(S:PAnsiString);
asm
 jmp System.@LStrClr
end;

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:pstring;
 s_holder:integer;
begin
 s:=@s_holder;
 LStrFromPCharLen(s,"%PATH%",6);
 ExpandEnvironmentStrings2(s^);
 Write_(s^);
 LStrClr(s);
end.


 
Сергей М. ©   (2008-04-04 15:01) [85]


> @HandleFinally там есть.


Согласен, есть.

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


 
Сергей М. ©   (2008-04-04 15:05) [86]

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

А ошибка там обязательно будет)


 
Тыщ   (2008-04-04 15:09) [87]

Ничего, с pchar"ами не лучше.


 
Игорь Шевченко ©   (2008-04-04 15:10) [88]

Дети Ивана Кулибина.


 
Сергей М. ©   (2008-04-04 15:34) [89]


> Ничего, с pchar"ами не лучше


Угу.
Лучше, наверно, нарваться на исключение и игнорировать этот факт (как и саму обработку), пребывая в святой уверенности, что операция прошла успешно)


> 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); //в buffer"е мусор, это спровоцирует иск.ситуацию
>  SetString(s,Buffer,Size-1); //даже если GetMem выполнена успешно, аллокация памяти под строку и копирование туда данных из буфера тоже может завершиться неуспехом ?
>  FreeMem(Buffer); //если в buffer"е не мусор, то произойдет утечка памяти, поскольку при обработке искл-я у тебя происходит банальный выход по RETN
> end;
>


 
Сергей М. ©   (2008-04-04 15:36) [90]


> Дети Ивана Кулибина


Да уж ...
SEH для них - просто ненужный мусор)


 
Тыщ   (2008-04-04 15:39) [91]

Сергей М. ©   (04.04.08 15:34) [89]

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


 
Тыщ   (2008-04-04 15:40) [92]

Сергей М. ©   (04.04.08 15:36) [90]

SEH на каждый чих - мусор, вот :)


 
Сергей М. ©   (2008-04-04 15:48) [93]


> Если системе будет настолько нехватать памяти


А с чего ты взял, что операция аллокации может вызвать искл-е только по этой причине ?)


> SEH на каждый чих - мусор


Зачем на каждый ?
Вовсе не обязательно)

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

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


 
Тыщ   (2008-04-04 15:58) [94]

Сергей М. ©   (04.04.08 15:48) [93]

> с чего ты взял, что операция аллокации может вызвать искл-е только по этой причине ?)

По какой же еще?

> программа после запуска тут же тихо умирает

Так получается именно из-за "насильной" вставки обработки исключений, от которой и так мало что осталось.
Если ее нет совсем, то получим стандартное и вполне приличное

The instruction at "0x00401080" referenced memory at "0x00000000". The memory could not be "read".

Click on OK to terminate the program
Click on CANCEL to debug the program


 
Сергей М. ©   (2008-04-04 16:10) [95]


> По какой же еще?


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

Да мало ли в бразилии Педро !)


> получим стандартное и вполне приличное


Очень прилично, нечего сказать)
Для какой-нить главбухши, знающий только "дебеты-кредиты-сальды-сторны" - самое то)


 
Тыщ   (2008-04-05 11:39) [96]

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

> например, некая твоя логическая ошибка привела к загаживанию управляющих стуктур менеджера памяти

Да уж, это надо постараться...

> Для какой-нить главбухши, знающий только "дебеты-кредиты-сальды-сторны" - самое то)

Для "какой-нить главбухши" я не пишу... пока что.


 
Mystic ©   (2008-04-07 18:24) [97]

> Во, обработку исключений победил!

При работе со строками большую часть ресурсов заберет не несколько ассемблерных инструкций + 12 байт стека + обращение к TEB, а использование динамической памяти. И победа далась тебе дорогой ценой: вставлено несколько дополнительных вызовов CALL и JMP. Можешь сравнить эти два фрагмента по скорости ;)


 
Сергей М,   (2008-04-07 20:44) [98]


> Mystic ©   (07.04.08 18:24) [97]


Красота требует жертв)
Автору все это фиолетово - главное чтобы было  "красиво")


 
oxffff ©   (2008-04-07 21:06) [99]


> Тыщ   (04.04.08 14:58) [84]
> Во, обработку исключений победил!


Кто? Где?


 
Сергей М,   (2008-04-07 21:10) [100]


> Кто? Где?


Опоздал)
Ордена Сутулова уже раздали)


 
oxffff ©   (2008-04-07 21:15) [101]


> Сергей М,   (07.04.08 21:10) [100]
>
> > Кто? Где?
>
>
> Опоздал)
> Ордена Сутулова уже раздали)


А зачем
procedure LStrClr(S:PAnsiString);
asm
jmp System.@LStrClr
end;

LStrClr(s);

Что S^:="" не поможет в случае гарантированной инициализации S? :)


 
Тыщ   (2008-04-08 17:17) [102]

oxffff ©   (07.04.08 21:15) [101]

А, ну да, s^:="" сделает вызов LStrClr напрямую.



Страницы: 1 2 3 вся ветка

Форум: "Основная";
Текущий архив: 2009.02.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.64 MB
Время: 0.01 c
2-1229502902
zorik
2008-12-17 11:35
2009.02.01
перевод каретки


2-1229423666
9899100
2008-12-16 13:34
2009.02.01
Property


2-1229722211
otecmaldun
2008-12-20 00:30
2009.02.01
Что надо добавить.


15-1228402519
[Непрошедший]
2008-12-04 17:55
2009.02.01
Непрохождение флюорогрофии на работе


6-1197880578
brother
2007-12-17 11:36
2009.02.01
TIdPOP3 просмотр содержимого в разных кодировках...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский