Исправил но не все ( Вовремя "дежурного блэкаута" попытался отладить но винда не любит повторов исключений , а часто перезагружаться АКБ не позволяет ) В начале думал что 64 разряда так влияют, но и в 32 тоже заглючило ( что-то с адресацией нездоровое началось ).iskander писал(а):Ага, кажется, исправил. Ещё было бы неплохо, если бы она какой-нибудь результат возвращала.Alex2013 писал(а):Чисто как вариант "псевдо оптимизации"
( Возможно где-то напутал "с циферками" но просто "как идея" )...Код: Выделить всё
function IntToStrTS(const AValue: SizeUInt): string; var i,J, vSrcLen, vSCount, vResLen: integer ; //! STmp: string; begin Str(AValue, STmp); // всеравно два раза память выделяется vSrcLen := STmp.Length; vSCount:= ((vSrcLen - 1) div 3) ; vResLen := vSrcLen +vSCount; SetLength(Result, vResLen); J:=3; For I:=1 to vSCount do begin If i = vSCount then J:=vResLen - vSCount*3 ; // Чуть криво но работать по идее будет if J<>0 then begin Move( STmp[vResLen-(i*3)],Result[vResLen-(i*4)+1],J); // ??? Result[vResLen-(i*4)]:=' ';// или FormatSettings.ThousandSeparator end end end;
Для проверки написал буквально следующее.
Move( STmp[1],Result[1],1);Move( STmp[2],Result[2],1);Move( STmp[3],Result[3],1);
Один раз нормально сработало добавил
For I:=1 to vSrcLen do Move( STmp,Result,1);
Начало все путать местами причем и первая строчка тоже перестала работать.
Есть идея что это все же UTF8 глючит или оптимизация под "многоядерность" вылезла.
( но больше всего похоже на банальный "зомби-процесс" весящий в памяти который перехватывает обработку у исправленных версии после нескольких плохо обработанных исключений, и в результате все попытки экстренно править код только все портят )

