Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1391 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Allocation memoire et initialisation par memset.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Allocation memoire et initialisation par memset.

n°170287
joce
Architecte / Développeur principal
"BugHunter"
Posté le 03-07-2002 à 10:16:44  profilanswer
 

Admettons que je veuille allouer d'un bloc 10* sizeof d'une structure.
 
donc un va dire  
 
truc->pipo = util_alloc_memory(10*sizeof(mastructure_pipo));
 
est-ce que je peux faire de facon safe juste apres :
 
memset ((void *) truc->pipo, 0, 10*sizeof(mastructure_pipo));
 
ou c'est pas safe ?
 
De meme si je fais  
 
truc->pipo = util_alloc_memory(sizeof(mastructure_pipo));
 
Est-ce que l'alloc memoire de truc->pipo sera faite de facon contigue ce qui me permettrait de faire le memset juste apres ?

mood
Publicité
Posté le 03-07-2002 à 10:16:44  profilanswer
 

n°170288
Max Evans
Posté le 03-07-2002 à 10:18:20  profilanswer
 

T pas cool Joce, je retiens :/  :sweat:


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°170292
joce
Architecte / Développeur principal
"BugHunter"
Posté le 03-07-2002 à 10:23:39  profilanswer
 

t'as pas continue a reflechir ??

n°170294
bjone
Insert booze to continue
Posté le 03-07-2002 à 10:24:32  profilanswer
 

bin le malloc() en lui même te fait une allocation de mémoire contigue....
 
attention à tester le pointeur avec NULL pour savoir si le malloc() a échoué.
 
dans la pratique sous Windows, tu as 2Go d'espace mémoire par process, donc tu peux malloc() pour 2Go, ça partira dans le swap (si il en mode auto il grossira)....
 
le malloc() va te donner un bloc contigu, mais après "physiquement" le bloc peut peutêtre parsemé dans la ram physique et le swap, dû à la pagination utilisée par le mmu.

n°170295
Max Evans
Posté le 03-07-2002 à 10:25:19  profilanswer
 

joce a écrit a écrit :

t'as pas continue a reflechir ??




 
Ben si, mais dur dur :/
Tu veux vraiment pas m'aider ?
Je rame depuis qu'on c parlé  :sweat:


Message édité par Max Evans le 03-07-2002 à 10:25:45

---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°170297
bjone
Insert booze to continue
Posté le 03-07-2002 à 10:26:11  profilanswer
 

attention qu'on soit bien d'accord, ton truc->pipo ne pointes sur rien ?
 
si tu veux redimenssionner c'est realloc() obligatoirement, sinon ton ancien bloc mallocqué :D est perdu et tu as un memory leak....

n°170300
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 03-07-2002 à 10:28:31  profilanswer
 

tu peux aussi utiliser calloc(), ça t'évitera de faire un memset() juste après, calloc() réservant un espace mémoire en initialisant son contenu à 0


---------------
J'ai un string dans l'array (Paris Hilton)
n°170302
bjone
Insert booze to continue
Posté le 03-07-2002 à 10:28:55  profilanswer
 

et tu as calloc() qui te permet aussi d'allouer, et mettre à 0 automatiquent le bloc alloué.
 
PS: sous Unix/Linux, tout ce qui est alloué est mis à 0 par le noyau, et tout ce qui reallocqué en plus est mis à 0.
pour empêcher un process de scanner les données en mémoires.
 
sous Windows 9X la mémoire est en vrac (donc fo faire un memset), sous Windows NT je sais plus si le noyau fait un clean automatique à l'alloc.

n°170303
bjone
Insert booze to continue
Posté le 03-07-2002 à 10:29:17  profilanswer
 

merde grillaid. :D

n°170316
joce
Architecte / Développeur principal
"BugHunter"
Posté le 03-07-2002 à 10:43:54  profilanswer
 

je suis sous Solaris, HP et IBM

mood
Publicité
Posté le 03-07-2002 à 10:43:54  profilanswer
 

n°170319
bjone
Insert booze to continue
Posté le 03-07-2002 à 10:48:01  profilanswer
 

donc les blocs alloués sont très probablement effaçés par le noyau.

n°171053
joce
Architecte / Développeur principal
"BugHunter"
Posté le 04-07-2002 à 12:17:57  profilanswer
 

bjone a écrit a écrit :

donc les blocs alloués sont très probablement effaçés par le noyau.




non y a souvent du garbage si c'est pas initialisé


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°171565
Musaran
Cerveaulté
Posté le 05-07-2002 à 02:31:05  profilanswer
 

1ère question
Je vois vraiment pas ce qui te fais penser que c'est peut-être pas sûr.
 
2ème:
Contiguë à quoi?
A l'allocation précédente ? Non.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°171577
joce
Architecte / Développeur principal
"BugHunter"
Posté le 05-07-2002 à 08:11:46  profilanswer
 

musaran a écrit a écrit :

1ère question
Je vois vraiment pas ce qui te fais penser que c'est peut-être pas sûr.
 
2ème:
Contiguë à quoi?
A l'allocation précédente ? Non.




non c'est juste que je savais pas si c'était contigü, maintenant c'est bon :D
Non c'était pas à l'alloc précédente :)


---------------
Protèges carnets personnalisés & accessoires pour bébé

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Allocation memoire et initialisation par memset.

 

Sujets relatifs
[C++] Libération de mémoire.Pb de mémoire sous Excel
Trou de mémoirecapacité mémoire de la carte graphique en OpenGL
soft pour fuites mémoirecomment s'appelle ce composant (trou de memoire inside)
re post: Question carte a memoire...Question carte à mémoire....
[java/JSP] paramètres d'initialisation d'un JSP dans le web.xml[Java] Connaître la mémoire utilisée par une classe
Plus de sujets relatifs à : Allocation memoire et initialisation par memset.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR