Форум: "Основная";
Текущий архив: 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