Meilleure méthode pour effacer la mémoire ? [Résolu]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Meilleure méthode pour effacer la mémoire ? [Résolu]

Message par Kwai chang caine »

Bonjour la famille

Je suis en train d'utiliser l'instruction serveur

Code : Tout sélectionner

ReceiveNetworkData(IdConnection, *Buffer, 1000) 
Et je m'apperçois que parfois, il me reste des relicats d'anciennes données ecrites à cet emplacement.
Je vousdrais donc effacer les 1000 octets pour etre sur que y'ai pas d'embrouilles

Alors avant de vous déranger, j'ai chercher comme dirais quinquin que je ne citerais pas :lol: et je me suis rendu compte que deux methodes marchent.

Quand je refais dans une boucle un allocatememory et quand je rempli de vide les octets.
Quelle est la meilleure methode, n'est ce pas dangereux de reallouer a chaque passage de boucle, ou faut il remplir de vide ???

Code : Tout sélectionner

Debug "J'alloue 1000 caracteres en mémoire"
 *Buffer = AllocateMemory(1000)
 Debug ""
 
 Debug "J'ecris 1000 fois A"
 PokeS(*Buffer, RSet("", 1000, "A"), 1000)
 Debug PeekS(*Buffer,10)
 Debug ""
 
 Debug "J'efface la mémoire, en ecrivant des vides"
 PokeS(*Buffer, RSet("", 1000, ""), 1000)
 Debug PeekS(*Buffer,10)
 Debug Len(PeekS(*Buffer,10))
 Debug ""
 
 Debug "J'ecris à nouveau 1000 fois A"
 PokeS(*Buffer, RSet("", 1000, "A"), 1000)
 Debug PeekS(*Buffer,10)
 Debug ""
 
 Debug "Je réalloue 1000 caracteres en mémoire, pour effacer"
 *Buffer = AllocateMemory(1000)
 Debug PeekS(*Buffer,10)
 Debug Len(PeekS(*Buffer,10))
Pour une fois que je veux effacer quelque chose de ma memoire :?
D'habitude ça se fait tout seul :lol:

Merci et bonne journée
Dernière modification par Kwai chang caine le lun. 26/janv./2009 22:11, modifié 1 fois.
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message par Patrick88 »

freememory( ?

pat
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Merci beaucoup PATRICK de ta reponse 8)

En fait je veux pas vraiment la libérer, mais la vider.

Alors est ce que ça pose un probleme de faire ça, ou bien c'est comme ça qui faut faire :

Code : Tout sélectionner

For i = 1 To 100
 
 *Buffer = AllocateMemory(1000) 
 PokeS(*Buffer, RSet("", 1000, "A"), 1000) 
 Debug PeekS(*Buffer,10) 
 FreeMemory(*Buffer)
 Debug "" 
 
Next


En fait je veux utiliser une mémoire la nettoyer pour etre sur qu'il ne reste pas de caracteres qui traine, et la réutiliser à nouveau et ceci X fois de suite :D
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Bijour Mssieur Kwaï,

Un problème de crasse? Je connais, je les cultive à mon insu, je dirais même...

Pour nettoyer en profondeur et plus blanc que le blanc vendu auparavant, je vous conseille la lessive ZeroMemory_().

En effet, ZeroMemory_() va nettoyer là où aucune lessive ne nettoyait jusque là, et même si vous faites un noeud.

Code : Tout sélectionner

TailleZoneEnOctets = 1000
*Adresse = AllocateMemory(TailleZoneEnOctets)

; Ici tu mets la saleté à coup de PokeX() et tout le toutim...

ZeroMemory_(*Adresse, TailleZoneEnOctets)
Vendu par Crosoft Corp. «Don't worry... Be A.P.I.»
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Merci beaucoup mon bon OLLIVIER

J'savais pas qu'y avait un "NOUVEL OUMOUL" :lol:

Alors je peut ecrire un boucle comme celle la, sans poser aucun probleme ??? :roll:

Code : Tout sélectionner

For i = 1 To 100 
  
 *Buffer = AllocateMemory(1000) 
 PokeS(*Buffer, RSet("", 1000, "A"), 1000) 
 Debug PeekS(*Buffer,10) 
 ZeroMemory_(*Buffer, 1000)
 Debug "" 
  
Next
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Tu peux même surboucler, faire autant de boucle que tu veux: je te l'ai bien dit, même avec des noeuds ça nettoie...
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Merci beaucoup.
Cette fois j'ai bien compris 8)

Je croyais qu'il fallait faire un allocate memory qu'une fois dans un prog :oops:

Alors, je t'explique pas le bordel de ce qui me remontait :D

Alors impecable, je vais faire exactement cette boucle 8)
Comme ça ma mémoire y va etre toute propre :D

Merci Mr PROPRELLIVIER :lol:
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

J'allais le dire, utilise Zeromemory, comme j'ai pas cherché sous Linux s'il existait, j'ai fait ca

Code : Tout sélectionner

Procedure ZeroMemory(*memory.CHARACTER, size.l)
Protected iByte

  iByte = 0
  While iByte <= size
    PokeL(*memory + iByte, $00)
    iByte + 4
  Wend
EndProcedure
Ca marche aussi bien sous GNU/Linux que sous win. :wink:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Merci beaucoup FLAITH 8)

Je viens d'essayer ton code, et j'ai une jolie barre rouge à la ligne 14 :cry:

ça plante à la 42e reprise 8O
Seul le maitre des clefs peut me dire pourquoi.
Peut etre une histoire de decalage de quelque chose :roll:

Code : Tout sélectionner

Procedure ZeroMemory(*memory.CHARACTER, size.l) 
Protected iByte 

  iByte = 0 
  While iByte <= size 
    PokeL(*memory + iByte, $00) 
    iByte + 4 
  Wend 
EndProcedure

For i = 1 To 100 
  
 *Buffer = AllocateMemory(1000) 
 PokeS(*Buffer, RSet("", 1000, "A"), 1000)
 Debug i
 Debug PeekS(*Buffer,10) 
 ZeroMemory(*Buffer, 1000) 
 Debug PeekS(*Buffer,10) 
 Debug "" 
  
Next
Le code de PATRICK avec FREEMEMORY ne marche pas tout à fait.
Car quand j'essai de relire, j'ai un hieroglyphe.
Je pense que c'est normal, car j'essai de lire une partie de la memoire qui n'existe plus :roll:

Code : Tout sélectionner

For i = 1 To 100 
  
 *Buffer = AllocateMemory(1000) 
 PokeS(*Buffer, RSet("", 1000, "A"), 1000) 
 Debug i
 Debug PeekS(*Buffer,10) 
 FreeMemory(*Buffer) 
 Debug PeekS(*Buffer,10) 
 Debug "" 
  
Next
Par contre le code de OLLIVIER marche avec l'API

Code : Tout sélectionner


For i = 1 To 100 
  
 *Buffer = AllocateMemory(1000) 
 PokeS(*Buffer, RSet("", 1000, "A"), 1000) 
 Debug i
 Debug PeekS(*Buffer,10) 
 ZeroMemory_(*Buffer, 1000) 
 Debug PeekS(*Buffer,10) 
 Debug "" 
  
Next
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

zigoto, si tu fait FreeMemory, il faut refaire un AllocateMemory derrière, sinon, ta zone mémoire n'existe plus

Code : Tout sélectionner

For i = 1 To 100 
  
 *Buffer = AllocateMemory(1000) 
 PokeS(*Buffer, RSet("", 1000, "A"), 1000) 
 Debug PeekS(*Buffer,10) 
 FreeMemory(*Buffer) 
 Debug "" 
  
Next
sinon, évite de faire 36 AllocateMemory sans faire un freememory
si tu fais ça, c'est pas bon !

Code : Tout sélectionner

For i = 1 To 100 
  
 *Buffer = AllocateMemory(1000) 
 PokeS(*Buffer, RSet("", 1000, "A"), 1000) 
 Debug PeekS(*Buffer,10) 
 ZeroMemory_(*Buffer, 1000) 
 Debug "" 
  
Next
Tu as allouer 100 zones mémoires de 1000 octets

il faut faire comme ça :

Code : Tout sélectionner

*Buffer = AllocateMemory(1000) 
For i = 1 To 100 
  
 PokeS(*Buffer, RSet("", 1000, "A"), 1000) 
 Debug PeekS(*Buffer,10) 
 ZeroMemory_(*Buffer, 1000) 
 Debug "" 
  
Next
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

zigoto !!!! 8O

Coooooool !!! KCC il a un nouveau titre :D

KCC il espere, avoir un jour la poitrine de samantha fox, pour pouvoir accrocher toutes les medailles de ses amis du forum.

Parce que maintenant KCC il est (Dans l'ordre "montrologique")
Le bouffon de FLYPE (Il me manque d'ailleur mon roi :cry:)
Le IDIOTMAN de SROD
Et fier d'etre le ZIGOTO de SOLDAT :D

Merci beaucoup soldat, c'est "beaucoup trop de la honnir" (Rabbi jacob)

Tres bien, donc j'ai compris que l'API efface la memoire sans la tuer et c'est exactement ce que je voulais faire :wink:

Freememory TUE la memoire , tin tin tintin tin tintin tintin tintin :cry:
Mes bien cher freres nous somme tous réunis en cette journée de grace afin de faire un dernier adieu a cette mémoire...... :cry:
Il faut donc en recréer une toute neuve avec "ALLO CAT SAUVETAGE".....non non KCC t'es une burne :? le gentil monsieur y t'as dit ALLOCATMEMORY :?

Merci de cette marque de gratitude et surtout de ton aide.
ATTENTION !!! KCC il y tiens à son titre :?
Les autres y ont qu'a prendre un autre......Abruti, bouffon, etc....c'est pas ce qui manque :D
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Message par PAPIPP »

Je viens de faire quelques essais
et voici les résultats
J'ai modifier la première méthode pour allouer 100 zones
et les retrouver

Code : Tout sélectionner

; ; code 
Debug "**************** première  méthode **************"

Dim *buffer(100)
For i = 0 To 100
  
  *Buffer(I) = AllocateMemory(1000)
  PokeS(*Buffer(i), RSet("", 1000, "A"), 1000)
  Debug PeekS(*Buffer(i), 10)
  
  Debug ""+Str(i)+"adress="+Hex(*buffer(i))
  
Next
Debug "**************** fin libere la mémoire les zones d'allocation sont enregitrées **************"
For i=0 To 100
Debug PeekS(*Buffer(i), 10)
Debug ""+Str(i)+"adress="+Hex(*buffer(i))

FreeMemory(*Buffer(i))
Next
; *******************************************************************************************************
; ; Code:
Debug "**************** deuxième méthode  comment retrouver les zones d'allocation ?? **************"
For i = 1 To 100
  
  *Buffer = AllocateMemory(1000)
  PokeS(*Buffer, RSet("", 1000, "A"), 1000)
  Debug PeekS(*Buffer, 10)
  ZeroMemory_(*Buffer, 1000)
  Debug ""+Str(i)+"adress="+Hex(*buffer)
  
Next
;*************************************************************************************************************** 
; code 
Debug "**************** troisième méthode ici il n'y a qu'une zone d'allouée et non 100 zones **************"

*Buffer = AllocateMemory(1000)
For i = 1 To 100
  
  PokeS(*Buffer, RSet("", 1000, "A"), 1000)
  Debug PeekS(*Buffer, 10)
  ZeroMemory_(*Buffer, 1000)
  Debug ""+Str(i)+"adress="+Hex(*buffer)
Next
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Merci PAPIPP

Mais j'ai une petite erreur ligne 27 :cry:
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Message par PAPIPP »

oups! j'avais réalisé les essais en plaçant les autres méthodes en commentaires et je n'ai pas pas vu cette erreur d'allocation.
Après plusieurs essais dont certains avec 200 allocations j'ai une erreur sur freememory dans la première méthode.
Avec 100 allocations les 3 méthodes prises les unes après les autres
fonctionnent normalement
Il semble que quelque chose nous limite en nombre d'allocation
A voir de plus près peut-être y-a-t'il une bogue

Code : Tout sélectionner

; ; code
 #imax=100
; Debug "**************** première  méthode **************"
; 
; Dim *buffer(#imax)
; For i = 0 To #imax
;   
;   *Buffer(I) = AllocateMemory(1000)
;   PokeS(*Buffer(i), RSet("", 1000, "A"), 1000)
;   Debug PeekS(*Buffer(i), 10)
;   
;   Debug "" + Str(i) + "adress=" + Hex(*buffer(i))
;   
; Next
; Debug "*************** fin libere la mémoire les zones d'allocation sont enregitrées **************"
; ; For i = #imax To 0 Step -1
; For i = 0 To #imax
; 
;   Debug PeekS(*Buffer(i), 10)
;   Debug "" + Str(i) + "adress=" + Hex(*buffer(i))
;   
;   FreeMemory(*Buffer(i))
; Next
; ; Delay (1000)
; 
; ; *******************************************************************************************************
; ; ; Code:
Debug "**************** deuxième méthode  comment retrouver les zones d'allocation ??  **************"
For i = 1 To #imax
  
  *Buffer = AllocateMemory(1000)
  PokeS(*Buffer, RSet("", 1000, "A"), 1000)
  Debug PeekS(*Buffer, 10)
  ZeroMemory_(*Buffer, 1000)
  Debug "" + Str(i) + "adress=" + Hex(*buffer)
  ; FreeMemory(*Buffer)

Next
;***************************************************************************************************************
; code
Debug "**************** troisième méthode ici il n'y a qu'une zone d'allouée et non 100 zones **************"

*Buffer = AllocateMemory(1000)
For i = 1 To 100
  
  PokeS(*Buffer, RSet("", 1000, "A"), 1000)
  Debug PeekS(*Buffer, 10)
  ZeroMemory_(*Buffer, 1000)
  Debug "" + Str(i) + "adress=" + Hex(*buffer)
Next
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Cette fois plus d'erreur merci beaucoup PAPIPP

Je vais etudier ça 8)
Répondre