NtAllocateVirtualMemory ou RtlAllocateHeap? [Résolu]

Neo_Fr 653 Messages postés mardi 6 décembre 2005Date d'inscription 10 novembre 2014 Dernière intervention - 17 août 2007 à 16:51 - Dernière réponse : BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention
- 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
Afficher la suite 

10 réponses

Répondre au sujet
NairodDorian 130 Messages postés lundi 26 juin 2006Date d'inscription 18 août 2008 Dernière intervention - 18 août 2007 à 13:10
+3
Utile
HeapAlloc -> Allocation petits blocs
VirtualAlloc -> Allocation gros blocs
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de NairodDorian
Neo_Fr 653 Messages postés mardi 6 décembre 2005Date d'inscription 10 novembre 2014 Dernière intervention - 18 août 2007 à 13:40
+3
Utile
RtlAllocateHeap est donc surement mieux adapter a ce que je veux faire..
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Neo_Fr
NairodDorian 130 Messages postés lundi 26 juin 2006Date d'inscription 18 août 2008 Dernière intervention - 18 août 2007 à 13:49
+3
Utile
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)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de NairodDorian
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 18 août 2007 à 09:14
0
Utile
En user mode, utilise VirtualAlloc.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Neo_Fr 653 Messages postés mardi 6 décembre 2005Date d'inscription 10 novembre 2014 Dernière intervention - 18 août 2007 à 12:57
0
Utile
VirtualAlloc n'apelle pas HeapAlloc?
Commenter la réponse de Neo_Fr
Neo_Fr 653 Messages postés mardi 6 décembre 2005Date d'inscription 10 novembre 2014 Dernière intervention - 18 août 2007 à 13:37
0
Utile
petit bloc, gros bloc?
1mo c'est considerer comme un gros bloc?
Commenter la réponse de Neo_Fr
NairodDorian 130 Messages postés lundi 26 juin 2006Date d'inscription 18 août 2008 Dernière intervention - 18 août 2007 à 13:38
0
Utile
Non
Commenter la réponse de NairodDorian
Neo_Fr 653 Messages postés mardi 6 décembre 2005Date d'inscription 10 novembre 2014 Dernière intervention - 18 août 2007 à 14:15
0
Utile
En faite je cherche juste a lire/ecrire un fichier par bloc de 1mo(que j'alloue une seule fois par lecture/ecriture)
Commenter la réponse de Neo_Fr
NairodDorian 130 Messages postés lundi 26 juin 2006Date d'inscription 18 août 2008 Dernière intervention - 18 août 2007 à 14:17
0
Utile
Dans ce cas HeapAlloc sans aucun doute.
Commenter la réponse de NairodDorian
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 18 août 2007 à 18:59
0
Utile
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++
Commenter la réponse de BruNews

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.