lib memory zero/fill/move
lib memory zero/fill/move
j'imagine que ce ne sont pas les fonctions les plus difficiles à coder... j'en ai fait deux sur les trois... y'a ke le move que j'ai jamais fait... ce serait bien de les avoir en PB...
Dri
Dri
Le Move ? Pour déplacer un bloc d'une adresse à une autre ?
Pour ça on peut passer par CopyMemory ?
Pour ça on peut passer par CopyMemory ?
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
je sais pas en fait... j'ai pas fait de tests mais bon ca prend deux minutes... mais si le bloc source et destination se chevauchent, le résultat n'est pas erroné ?
et puis surtout ce qui serait intéressant, c'est de les avoir en PB natif comme ca pas besoin de faire d'userlib ou d'includefile...
Dri
et puis surtout ce qui serait intéressant, c'est de les avoir en PB natif comme ca pas besoin de faire d'userlib ou d'includefile...
Dri
Il n'y a pas de risque de chevauchement si tu utilises un AllocateMemory. Ce qui permettrait de tout faire en PB natif.
Le seul truc, c'est que la zone de départ ne sera pas forcément désallouée (à moins que tu ne disposes du pointeur de zone source pour faire un FreeMemory()).
Le seul truc, c'est que la zone de départ ne sera pas forcément désallouée (à moins que tu ne disposes du pointeur de zone source pour faire un FreeMemory()).
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
le problème du chevauchement, c'est qu'on peu très bien vouloir le faire de son plein gré ^^
si je veux bouger une partie d'une zone de mémoire quelques octet "apres" y'a bien un risqaue de chevauchement mais voulu ^^
(c'est pareil avec une copie d'ailleurs, si on veut copier N octets n octets plus loin avec n < N...)
Dri
si je veux bouger une partie d'une zone de mémoire quelques octet "apres" y'a bien un risqaue de chevauchement mais voulu ^^
(c'est pareil avec une copie d'ailleurs, si on veut copier N octets n octets plus loin avec n < N...)
Dri

Une piste de réponse (mais c'est juste pour un jeu d'essai, pas performant et sans doute pas forcément opérationnel) :
Code : Tout sélectionner
Procedure MoveMemory(*Source_Address, *Destination_Address, Length)
Debug *Source_Address
Debug *Destination_Address
If *Source_Address + Length > *Destination_Address
*Buffer = AllocateMemory(Length)
Debug *Buffer
CopyMemory(*Source_Address, *Buffer, Length)
FreeMemory(*Source_Address)
CopyMemory(*Buffer, *Destination_Address, Length)
FreeMemory(*Buffer)
Else
CopyMemory(*Source_Address, *Destination_Address, Length)
FreeMemory(*Source_Address)
EndIf
EndProcedure
Debug "test 1"
String1.s = "String1"
lString1 = Len(String1)
*Buffer1 = @String1
*Buffer2 = AllocateMemory(1024)
Debug "Buffer1 : " + PeekS(*Buffer1)
Debug "Buffer2 : " + PeekS(*Buffer2)
MoveMemory(*Buffer1, *Buffer2, lString1)
Debug "Buffer1 : " + PeekS(*Buffer1)
Debug "Buffer2 : " + PeekS(*Buffer2)
Debug "test2"
String1.s = "String1"
lString1 = Len(String1)
*Buffer1 = @String1
*Buffer2 = *Buffer1 + 1
Debug "Buffer1 : " + PeekS(*Buffer1)
Debug "Buffer2 : " + PeekS(*Buffer2)
MoveMemory(*Buffer1, *Buffer2, lString1)
Debug "Buffer1 : " + PeekS(*Buffer1)
Debug "Buffer2 : " + PeekS(*Buffer2)
CallDebugger
End
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
je confirmefweil a écrit :c'est juste pour un jeu d'essai, pas performant et sans doute pas forcément opérationnel

la fonction ne préserve pas les zones de mémoire désignées et surtout il ne faut pas faire de freememory() à la légère
http://purebasic.hmt-forum.com/viewtopic.php?t=3145
surtout que tu te prends la tête pour pas grand chose ^^
je voudrais juste que ce soit ajouter à PB, bien que ce soit des choses que je pourrais me coder... (même si j'ai pas encore essayer le move)
Dri
d'ailleurs en y réfléchissant c koi la différence entre copy et move ?
sur le msdn c'est l'overlap, en francais le chevauchement... c'est donc bien le but de movememory, faire une copie sans exclure la possibilité de chevauchement...
dans ce cas autant que la fonction copymemory de PB le gère directement (ca évite les problème...) et c'est probablement déjà le cas (Fred ?)
du coup ma requête ne porte que sur deux nouvelles fonctions ^^
Dri
sur le msdn c'est l'overlap, en francais le chevauchement... c'est donc bien le but de movememory, faire une copie sans exclure la possibilité de chevauchement...
dans ce cas autant que la fonction copymemory de PB le gère directement (ca évite les problème...) et c'est probablement déjà le cas (Fred ?)
du coup ma requête ne porte que sur deux nouvelles fonctions ^^
Dri