Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.12.13;
Скачать: CL | DM;

Вниз

Как быстро заполнить память однотипными значениями.   Найти похожие ветки 

 
@!!ex ©   (2009-10-27 19:35) [0]

FillMemory стандартный дельфевый умеет только байты записывать.
А мне нужно single записать. Это реально сделать сравнимо по скорости с FillMemory?


 
Юрий Зотов ©   (2009-10-27 19:41) [1]

CopyMemory в цикле со сдвигом адреса на размер single?


 
@!!ex ©   (2009-10-27 20:19) [2]

тоесть цикл на миллион итераций, с миллионом вызовов CopyMemory?
Думаю медленно будет.
Хотя подсказали идею.
Значения для звполнения одни и теже, и область одного и того же размера. Сделаю отдельную область, которую в конструкторе заполню целевыми значенями.
А в нужные моменты просто скопирую заполненнуб область на целевую.


 
Leonid Troyanovsky ©   (2009-10-27 20:31) [3]


> @!!ex ©   (27.10.09 20:19) [2]

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

А зачем в конструкторе? Заведи массив констант,
а в нужный момент - им и заполнишь.
Move forever.

--
Regards, LVT.


 
MBo ©   (2009-10-27 20:47) [4]


{Fills a block of memory with the given dword}
procedure FillDWord(AAddress: Pointer; ADWordValue: integer; ADWordCount:
integer);
asm
{On Entry: eax = AAddress
edx = DWordValue
ecx = ADWordCount}
neg ecx
jns @Done
shl ecx, 2
sub eax, ecx
@FillLoop:
mov [eax + ecx], edx
add ecx, 4
js @FillLoop
@Done:
end;

(Pierre le Riche)


procedure FillDWord(var Dest; Count, Value: Integer); register;
asm
 XCHG  EDX, ECX
 PUSH  EDI
 MOV   EDI, EAX
 MOV   EAX, EDX
 REP   STOSD
 POP   EDI
end;

(grids.pas)


 
Игорь Шевченко ©   (2009-10-27 20:52) [5]

@!!ex ©   (27.10.09 20:19) [2]

Достаточно быстро заполняет RtlCopyMemory из ntdll.dll, да и стандартный Move тоже немедленный.


 
Leonid Troyanovsky ©   (2009-10-27 20:55) [6]


> MBo ©   (27.10.09 20:47) [4]

> {Fills a block of memory with the given dword}

Ну, если блок, то можно даже не dword, а блоком констант.
Move forever.

--
Regards, LVT.


 
Riply ©   (2009-10-27 21:41) [7]

> [0] @!!ex ©   (27.10.09 19:35)
> FillMemory стандартный дельфевый умеет только байты записывать.
> А мне нужно single записать. Это реально сделать сравнимо по скорости с FillMemory?

RtlFillMemoryUlonglong ?


 
@!!ex ©   (2009-10-27 22:23) [8]

использовал [4] помогло, спасибо!


 
Inovet ©   (2009-10-28 18:25) [9]

> [4] MBo ©   (27.10.09 20:47)

mov [eax + ecx], edx
add ecx, 4

А тек не лучше?

mov [eax + ecx*4], edx
inc ecx


 
Inovet ©   (2009-10-28 18:39) [10]

> [4] MBo ©   (27.10.09 20:47)
> procedure FillDWord(var Dest; Count, Value: Integer); register;
>
> asm
> XCHG  EDX, ECX
> PUSH  EDI
> MOV   EDI, EAX
> MOV   EAX, EDX
> REP   STOSD
> POP   EDI
> end;
>
> (grids.pas)

Говорят stos стал медленне mov.

{On Entry: eax = AAddress
edx = DWordValue
ecx = ADWordCount}
test ecx, ecx
jns @Done
@FillLoop:
mov [eax + ecx*4], edx
dec ecx
js @FillLoop
@Done:

Ещё бы на границу кратную 4 учесть не мешало


 
MBo ©   (2009-10-28 18:56) [11]

>Говорят stos стал медленне mov.
там, где я взял код Pierre le Riche, это обсуждалось, пишут, что бывает по-разному.


 
Inovet ©   (2009-10-28 19:46) [12]

> [11] MBo ©   (28.10.09 18:56)
> >Говорят stos стал медленне mov.
> там, где я взял код Pierre le Riche, это обсуждалось, пишут,
> что бывает по-разному.

А что о его версии заполнения, ведь наверно неспроста так, на первый взглаяд через ж, add ecx,4 и прочее сделано?


 
MBo ©   (2009-10-29 06:27) [13]

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


 
Anatoly Podgoretsky ©   (2009-10-29 10:20) [14]


> @!!ex ©   (27.10.09 20:19) [2]

Что за задача такая, что обычного цикла недостаточно



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

Текущий архив: 2009.12.13;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.016 c
2-1256574396
Dragon-zla
2009-10-26 19:26
2009.12.13
Длина столбца


15-1255814375
sniknik
2009-10-18 01:19
2009.12.13
Тем кто пользуется браузером Mozilla Firefox полезная ссылка


15-1255158192
vrem
2009-10-10 11:03
2009.12.13
Поздравляю с днём психического здоровья..


6-1210679150
Андрей
2008-05-13 15:45
2009.12.13
Как получить данные от сервера в ответ на post метод


2-1256109863
RWolf
2009-10-21 11:24
2009.12.13
AnsiExtractQuotedStr(PChar(str), ...)