Форум: "Начинающим";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];
ВнизСравнение двух блоков памяти Найти похожие ветки
← →
niko_ (2007-03-23 16:26) [0]Подскажите пожалуйста нет ли каких низкоуровневых (ну или каких других) функций для быстрого сравнение двух участков памяти.
Щас я делаю так: беру по 1 (очередному) байту из каждого участка и сравниваю их. Как то это мне не очень нравится.
← →
Eraser © (2007-03-23 16:28) [1]> [0] niko_ (23.03.07 16:26)
CompareMem
← →
niko_ (2007-03-23 16:35) [2]Штож, это здорово.
Ну а API"шного не чего нет?
Просто мне это в С++ надо, а так тогда этот код перелапачу.
← →
Сергей М. © (2007-03-23 16:35) [3]
> Щас я делаю так: беру по 1 (очередному) байту из каждого
> участка и сравниваю их.
А как иначе ?)
Сравнение на этом и построено)
← →
niko_ (2007-03-23 16:37) [4]Сергей М. © (23.03.07 16:35) [3]
не ну я как раз и имел ввиду какой нить вариант на Assembler"е или может что нить API"ишное (уже для этого дела сделаное).
← →
Сергей М. © (2007-03-23 16:39) [5]
> niko_ (23.03.07 16:37) [4]
> какой нить вариант на Assembler"е
А ты, надо понимать, "шаришь на Assembler"е" ?)
← →
niko_ (2007-03-23 16:41) [6]надо понимать - шарю.
Но в "ботаны" не рвусь :)
← →
Сергей М. © (2007-03-23 16:46) [7]
> niko_ (23.03.07 16:41) [6]
>
> надо понимать - шарю
И ?
Что мешает "сбацать сабж" самому, скромный "нервущийсявботаны" ты наш ?)
← →
Eraser © (2007-03-23 16:47) [8]> [4] niko_ (23.03.07 16:37)
> не ну я как раз и имел ввиду какой нить вариант на Assembler"е
[1] там как раз на ассемблере ) в BDS2006 эта ф-ция за авторством Aleksandr Sharahov"a, кстати посетителя данного форума.
← →
niko_ (2007-03-23 16:54) [9]Сергей М. © (23.03.07 16:46) [7]
Да не что и не мешает.
Было предположение что такого рода функция есть в API.
← →
Сергей М. © (2007-03-23 16:55) [10]
> niko_ (23.03.07 16:41) [6]
>
> надо понимать - шарю.
rep movs - для "шарящих")
← →
Сергей М. © (2007-03-23 16:57) [11]
> niko_ (23.03.07 16:54) [9]
> Было предположение что такого рода функция есть в API.
Ну есть такие, предположим ..
Но чем тебе их дельфийские рапперы не угодили ?)
← →
niko_ (2007-03-23 16:57) [12]Eraser © (23.03.07 16:47) [8]
> [1] там как раз на ассемблере )
потому то я и сказал - перелапачу
> в BDS2006 эта ф-ция за авторством Aleksandr Sharahov"a, кстати посетителя данного форума
У меня 7-я делфя, а не 9-я, так что надеюсь Aleksandr Sharahov будет не против.
← →
niko_ (2007-03-23 16:59) [13]Сергей М. © (23.03.07 16:57) [11]
> Но чем тебе их дельфийские рапперы не угодили ?)
Я пишу на С++ в среде VS2005
← →
Rouse_ © (2007-03-23 17:14) [14]
> я как раз и имел ввиду какой нить вариант на Assembler"е
Вот тебе слегка модернизированный вариант кода Александра Шарахова.
Добавлена проверка размера...function CompareMemEx(P1, P2: Pointer; Length: Integer): Boolean; assembler;
asm
test ecx, ecx
jz @LengthMismatch
add eax, ecx
add edx, ecx
xor ecx, -1
add eax, -8
add edx, -8
add ecx, 9
push ebx
jg @Dword
mov ebx, [eax+ecx]
cmp ebx, [edx+ecx]
jne @Ret0
lea ebx, [eax+ecx]
add ecx, 4
and ebx, 3
sub ecx, ebx
jg @Dword
@DwordLoop:
mov ebx, [eax+ecx]
cmp ebx, [edx+ecx]
jne @Ret0
mov ebx, [eax+ecx+4]
cmp ebx, [edx+ecx+4]
jne @Ret0
add ecx, 8
jg @Dword
mov ebx, [eax+ecx]
cmp ebx, [edx+ecx]
jne @Ret0
mov ebx, [eax+ecx+4]
cmp ebx, [edx+ecx+4]
jne @Ret0
add ecx, 8
jle @DwordLoop
@Dword:
cmp ecx, 4
jg @Word
mov ebx, [eax+ecx]
cmp ebx, [edx+ecx]
jne @Ret0
add ecx, 4
@Word:
cmp ecx, 6
jg @Byte
movzx ebx, word ptr [eax+ecx]
cmp bx, [edx+ecx]
jne @Ret0
add ecx, 2
@Byte:
cmp ecx, 7
jg @Ret1
movzx ebx, byte ptr [eax+7]
cmp bl, [edx+7]
jne @Ret0
@Ret1:
mov eax, 1
pop ebx
ret
@Ret0:
pop ebx
@LengthMismatch:
xor eax, eax
end;
← →
Чапаев © (2007-03-23 22:24) [15]> jz @LengthMismatch
jle может?
← →
Rouse_ © (2007-03-24 13:10) [16]
> jle может?
А смысл?
← →
Чапаев © (2007-03-24 19:30) [17]> [16] Rouse_ © (24.03.07 13:10)
Integer может содержать отрицательное значение.
← →
Rouse_ © (2007-03-26 10:15) [18]
> Integer может содержать отрицательное значение.
:)) не подумал что-то об этом :)
← →
Evgeny V © (2007-03-26 13:26) [19]
> niko_ (23.03.07 16:26)
Для С есть функция сравнения массиовов memcmp, на асм поcмотри CMPS, если память не подводит было такое, посмотри справочник по командам ассемблера
← →
DevilDevil © (2007-03-26 15:34) [20]> Сергей М. © (23.03.07 16:55) [10]
> > niko_ (23.03.07 16:41) [6]> > надо понимать - шарю.rep
> movs - для "шарящих")
Гы :)
← →
Fredy314 © (2007-03-26 18:40) [21]movs по идее перемещает
а тебе cmps сравнение нуно.
← →
niko_ © (2007-03-27 15:03) [22]
> Fredy314 © (26.03.07 18:40) [21]
> movs по идее перемещает
Это человек (Сергей М.) шутит так.
На скока я знаю rep cmps не опримальна и тут лучше обойтись циклом (хотя может я и ошибаюсь).
Ну да ладно, этот вопрос уже в прошлом.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.042 c