(Re-)bonjour !
J'ai essayé de faire un memcpy (plus rapide) que le standard, seulement, il arrive qu'il ne se comporte pas correctement...
Il est censé, lorsque les adresses sont alignées sur 32-bits, copier 32 bits d'un coup.
Je ne comprends pas ce qu'il se passe, j'ai l'impression que, parfois, il ne copie que des 0.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 __inline void * mymemcpy(void * dst, void const * src, size_t len) { int *lpDst = (int *)dst; int IntDst = reinterpret_cast<int>(dst); int const *lpSrc = (int const *)src; uintptr_t IntSrc = reinterpret_cast<uintptr_t>(src); if (!(IntSrc & 0xFFFFFFFC) && !(IntDst & 0xFFFFFFFC)) { while (len >=4) { *lpDst++ = *lpSrc++; len -= 4; } } char *pcDst = (char *)lpDst; char const *pcSrc = (char const *)lpSrc; while (len--) { *pcDst++ = *pcSrc++; } return (dst); }
Partager