NtAllocateVirtualMemory ou RtlAllocateHeap?

Résolu
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 - 17 août 2007 à 16:51
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 18 août 2007 à 18:59
Salut,
Quelqu'un sait quel est la fonction la plus rapide pour allouer de la memoire sous windows NtAllocateVirtualMemory ou RtlAllocateHeap?

Neo_Fr

10 réponses

NairodDorian Messages postés 130 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 18 août 2008
18 août 2007 à 13:10
HeapAlloc -> Allocation petits blocs
VirtualAlloc -> Allocation gros blocs
3
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
18 août 2007 à 13:40
RtlAllocateHeap est donc surement mieux adapter a ce que je veux faire..
3
NairodDorian Messages postés 130 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 18 août 2008
18 août 2007 à 13:49
Ca depend, si tu fais 20 allocs de 1 Mo alors dans ce cas VirtualAlloc donnera surement de meilleur perf ssi tu fais 1 fois l'alloc de 20Mo et que tu te balades avec un pointeur dans la zone que tu as reserve.

En resume :
si alloc < 4096 -> HeapAlloc
si alloc > 4096 -> VirtualAlloc
si alloc frequente (~50) < 1024 -> HeapAlloc
si alloc frequente (~50 ou +) > 1024 -> VirtualAlloc. (Alloue une fois la taille totale. Si taille finale inconnue alors utilise HeapAlloc)
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 août 2007 à 09:14
En user mode, utilise VirtualAlloc.

ciao...
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
18 août 2007 à 12:57
VirtualAlloc n'apelle pas HeapAlloc?
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
18 août 2007 à 13:37
petit bloc, gros bloc?
1mo c'est considerer comme un gros bloc?
0
NairodDorian Messages postés 130 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 18 août 2008
18 août 2007 à 13:38
Non
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
18 août 2007 à 14:15
En faite je cherche juste a lire/ecrire un fichier par bloc de 1mo(que j'alloue une seule fois par lecture/ecriture)
0
NairodDorian Messages postés 130 Date d'inscription lundi 26 juin 2006 Statut Membre Dernière intervention 18 août 2008
18 août 2007 à 14:17
Dans ce cas HeapAlloc sans aucun doute.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 août 2007 à 18:59
Autre différence importante, même si ça ne concerne pas ce cas de prog:
VirtualAlloc() garantit un alignement du pointeur sur une taille de page mémoire, idéal (et indispensable) pour opérations 128 bits (SSE2 et > ) ou fonctions attendant une adresse correctement alignée.

ciao...
BruNews, MVP VC++
0
Rejoignez-nous