Allocation memoire et initialisation par memset. - C++ - Programmation
Marsh Posté le 03-07-2002 à 10:18:20
ReplyMarsh Posté le 03-07-2002 à 10:24:32
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.
Marsh Posté le 03-07-2002 à 10:25:19
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é
Marsh Posté le 03-07-2002 à 10:26:11
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é est perdu et tu as un memory leak....
Marsh Posté le 03-07-2002 à 10:28:31
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
Marsh Posté le 03-07-2002 à 10:28:55
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.
Marsh Posté le 03-07-2002 à 10:48:01
donc les blocs alloués sont très probablement effaçés par le noyau.
Marsh Posté le 04-07-2002 à 12:17:57
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é
Marsh Posté le 05-07-2002 à 02:31:05
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.
Marsh Posté le 05-07-2002 à 08:11:46
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
Non c'était pas à l'alloc précédente
Marsh Posté le 03-07-2002 à 10:16:44
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 ?