Vik
>Unsigned short int tipusu adatokkal dolgozom, es probalkoztam mar a
>konyvtari
>memcpy() fuggvennyel, amitol ugyan gyorsabb lett, de a masolas
>eredmenye koszono viszonyban sem volt az eredetivel, tehat nem nyert.
>
>Arra gondoltam, ha assemblyben irnam meg a masolo rutint, akkor az pont
>jo lenne, de valamiert nem sikerult atadnom az unsigned short int *
>mutatok tartalmat (32 bites assembly programozas teren nincs igazan
tapasztalatom), igy ha valaki tudna ebben segiteni, azt megkoszonnem.
IMHO (az en szereny velemenyem szerint), nem erdemes assemblyben irni,
a
memcpy egyszeru fuggveny amit a compiler valoszinuleg elegge opmizalja:
Egy pelda (eredeti library forras):
void * memcpy(register void *s1, register const void *s2, register
size_t n)
{
register void * result;
result = s1;
while (n != 0)
{
--n;
*(char *)s1 = *(char *)s2;
s1 = (char *)s1 + 1;
s2 = (char *)s2 + 1;
}
return(result);
}
Vagy ahogy en irtam:
void * memcpy(register void *s1, register const void *s2, register
size_t n)
{
register void * result = s1;
register unsigned char *src = (unsigned char *) s2;
register unsigned char *dst = (unsigned char *) s1;
for (; n; n--)
*src++ = *dst++;
return(result);
}
Nem ertem hogy lehet hogy a memcpy nem masolja 'rendesen', ha a
fuggvenynek jo parametereket adsz.
Nezd meg pontosabban mit adsz at a fuggvenyek (memcpy-nak) mert sok
esetben ott a hiba.
(gyakori hiba : a size_t parameter : sizeof(pointer) ami csak a
'pointer'nek a nagysaga, nem amire mutat))
Attila
ui: elnezest a rossz magyarert, nem lakok mar MO-n 40 eve...
Elkuldheted a forras reszt maganlevelben, megnezem :
|