BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 20 oct. 2004 à 19:20
Cette structure sert a explorer ton espace d'adressage, faudraensuite interpreter les donnees.
Regarde dans Richter, il y a des exemples entiers sur l'analyse de la memoire virtuelle.
boumarsel
Messages postés298Date d'inscriptionjeudi 12 juin 2003StatutMembreDernière intervention 9 juillet 20081 20 oct. 2004 à 19:08
ma kestion est :
'est ce qu'on peut nous servir des données de la structure MEMORY_BASIC_INFORMATION (remplie par VirtualQueryEx) pour connaitre la taille de la memoire physique consommée par un processus?'
consommée par un seul processus (exemple: Vstudio.net environ 34Mo) et non pas la taille de la memoire physique du PC.
merci
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 20 oct. 2004 à 18:48
Utilise GlobalMemoryStatus() pour connaitre la taille de la memoire physique. La valeur sera erronee si tu as un PC avec + de 4 Go de RAM.
boumarsel
Messages postés298Date d'inscriptionjeudi 12 juin 2003StatutMembreDernière intervention 9 juillet 20081 20 oct. 2004 à 18:36
oui biensur, personnellement je peux pas ecrire un message juste pour signalier une telle erreur :)) 'te fache pas vecchio:)'...
j'ai une autre question pour toi brunews,
est ce qu'on peut nous servir des données de la structure MEMORY_BASIC_INFORMATION (remplie par VirtualQueryEx) pour connaitre la taille de la memoire physique consommée par un processus?
autrement dit est ce que les informations de la memoire virtuelle peuvent nous indiquer la taille de la memoire physique?
je ne peux pas utiliser directement GetProcessMemoryInfo (de psapi.dll) parcequ'elle n'est inclue que ds winNT
merci
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 19 oct. 2004 à 22:59
c'etait du au 'copier coller', fallait bien sur:
char *p, *c;
p = (char*) HeapAlloc(hHeap,0, len + 12);
c = p + 12;
// algo ici
HeapFree(hHeap, 0, p);
boumarsel
Messages postés298Date d'inscriptionjeudi 12 juin 2003StatutMembreDernière intervention 9 juillet 20081 19 oct. 2004 à 22:56
je pense que le code est juste sans aucune modification, en plus on peut allouer tout l'espace (len+12) pour 'p' ds des parties du code ou` on ne fait pas referance a` 'c' (et son contenu n'a pas d'importance), sinon on se limite a` la taille 12.
merci
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 17 oct. 2004 à 18:34
enleve '*' en trop animal !!! si c'est tout ce que t'avais a corriger....
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 17 oct. 2004 à 18:32
char *p, *c;
char *p = (char*) HeapAlloc(hHeap,0, len + 12);
c = p + 12;
// algo ici
HeapFree(hHeap, 0, p);
erreur: p est déja défini dans cette portée!
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 17 oct. 2004 à 18:03
new appelle HeapAlloc().
On peut regrouper en 1 seul appel:
char *p = new char[12];
char *c = (char*) HeapAlloc(hHeap,0, len);
peut devenir en + rapide:
char *p, *c;
char *p = (char*) HeapAlloc(hHeap,0, len + 12);
c = p + 12;
// algo ici
HeapFree(hHeap, 0, p);
boumarsel
Messages postés298Date d'inscriptionjeudi 12 juin 2003StatutMembreDernière intervention 9 juillet 20081 17 oct. 2004 à 17:10
j'ai lu ds des articles en MSDN que les fonction standard d'allocation (ex:new ) sont plus rapide que les fonctions de heap, qui peuvent causer des problemes si on les appelle tres souvent.je te donnerai les titres des articles +tard
merci
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 17 oct. 2004 à 16:37
Désolé j'avais pas vu qu'il y avait une question... En fait je ne sais pas vraiment, mais je pense qu'un new est en fait un HeapAlloc caché, donc autant appeler directement HeapAlloc. Dans tous les cas je pense que ce n'est pas très propre de mélanger des new et des HeapAlloc, de même qu'on ne mélange pas des new et des malloc
boumarsel
Messages postés298Date d'inscriptionjeudi 12 juin 2003StatutMembreDernière intervention 9 juillet 20081 17 oct. 2004 à 07:24
vaut mieux poser ta kestion ds le forum, ca te permetra davoir + de reponses
younessfatima
Messages postés5Date d'inscriptionsamedi 3 mai 2003StatutMembreDernière intervention17 octobre 2004 17 oct. 2004 à 00:05
Enfin on peut dire que tout le monde est satisfait. Le calme régne...buffffff....C cool.
je veux juste poser une question concernant les BDs et VC++? Un tuto ou un exple?
boumarsel
Messages postés298Date d'inscriptionjeudi 12 juin 2003StatutMembreDernière intervention 9 juillet 20081 16 oct. 2004 à 15:24
tu as tout a fait raison gendal, moi et alexman, nous avons deja regle ce probleme par des messages en pive.
je vois que vecchio n'a pas encore repondu a ma kestion...
Gendal67
Messages postés627Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention24 juillet 20112 16 oct. 2004 à 08:58
pffff, vous allez encore vous disputez comme ça longtemps ?? Vous etes tous des programmeurs! Nous sommes tous une unité alors aider vous et écouter vous mutuellement bon sang!!! N'agissez pas comme les trois quarts de gens débiles de ce monde!!
....allez, réconsillié vous! Entre parenthèse, moi aussi quand je met un commentaire, on me le "critique", mais ce n'est jamais une mauvaise critique c'est toujours pour essayer que je fasse mieux!! Faut pas s'enerver pour si peu bon sang....le potentiel de chacun est grand, et si on partage ce que l'on sait, on y ai tous gagnant ! :-))
Voila, dsl, 'pouvais pas supporté de voir une querelle sur ce genre de site!! bisous a tous!! :-)
Gendal67, a votre service !
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 10 oct. 2004 à 14:58
whaa, ca me met un coup serieux, ok je comprends, jsui dsl donc de ma participation au site.
Aurevoir
boumarsel
Messages postés298Date d'inscriptionjeudi 12 juin 2003StatutMembreDernière intervention 9 juillet 20081 10 oct. 2004 à 14:53
-reponse pour vacchio56: merci pour ta participation et tes conseils, generalement j'utilise les fonctions de heap pour les chaines qui sont longues ou demandent une reallocation frequente, et les fonctions standard comme "new" pour les chaines courtes. c'est pas juste comme methode?
-reponse pour youness: merci mon ami.
-reponse pour alexman: desolé, je perds pas mon temps à lire tes remarques et tes commentaires, l'autre weekend je t'ai ecris un long message pour t'expliquer beaucoup de choses, et critiquer un peu ta participation dans ce site. et par curiosité j'ai parti voir ton profile et j'ai jeté un coup d'oeil sur tes sources et tes reponses aux forums, et tout ce que j'ai fait après c'est effacer mn message sans te l'envoyer, et decider de te negliger.merci pour ta comprhension
younessfatima
Messages postés5Date d'inscriptionsamedi 3 mai 2003StatutMembreDernière intervention17 octobre 2004 10 oct. 2004 à 13:50
hassan c youness je pense que les remarques données par les amis sont profitables.je te remercie pr l'exemple. Ms les amis un peu d'encouragemnet pr Hassan. :)
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 10 oct. 2004 à 12:22
Salut,
Pour les en-têtes précompilés, c'est vrai que c'est interessant pour les gros projets, mais la on ne peut pas dire que cce soit vraiment le cas.
wcex.lpszClassName = "FENETRES"; ce genre d'affectation se fait a la déclaration, sinon utiliser strcpy
Pourquoitu utilises des new et delete, puisque tu as en heap?
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 10 oct. 2004 à 10:58
Oula, jviens de regarder le code, et j'ai maintenant kelk ptites ramark :
if(!RegisterClassEx(&wcex))return(0); //enregistrement de la classe de la fenetre
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC)Dialog); //chargement de la boite de dialogue
return (0);
}
Pkoi tu initialise une structure WNDCLASSEX ? Tu appelles ici une dialogbox, ca n'a rien a faire ici !
Ensuite, ds ton appel a la fonction DialogBox, Tu peux eviter le cast du 4eme param en prototypant bien ta fonction :
BOOL CALLBACK DlgProc(..)
et non LRESULT...
WM_INITDIALOG doit renvoyer 1, donc TRUE et non pas FALSE.
Bon ben c tt pour le moment.
++
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 10 oct. 2004 à 10:52
Bonjour,
Un ptit conseil deja : Crée un projet vide pour ne pas avoir ces "stdafx.xx" paske c chiant (tu peux ps compiler sans) et c moche (je trouve).
Et ensuite une kestion : Pkoi utiliser tchar.h et donc _tWinMain, TCHAR...Etc ?
20 oct. 2004 à 19:20
Regarde dans Richter, il y a des exemples entiers sur l'analyse de la memoire virtuelle.
20 oct. 2004 à 19:08
'est ce qu'on peut nous servir des données de la structure MEMORY_BASIC_INFORMATION (remplie par VirtualQueryEx) pour connaitre la taille de la memoire physique consommée par un processus?'
consommée par un seul processus (exemple: Vstudio.net environ 34Mo) et non pas la taille de la memoire physique du PC.
merci
20 oct. 2004 à 18:48
20 oct. 2004 à 18:36
j'ai une autre question pour toi brunews,
est ce qu'on peut nous servir des données de la structure MEMORY_BASIC_INFORMATION (remplie par VirtualQueryEx) pour connaitre la taille de la memoire physique consommée par un processus?
autrement dit est ce que les informations de la memoire virtuelle peuvent nous indiquer la taille de la memoire physique?
je ne peux pas utiliser directement GetProcessMemoryInfo (de psapi.dll) parcequ'elle n'est inclue que ds winNT
merci
19 oct. 2004 à 22:59
char *p, *c;
p = (char*) HeapAlloc(hHeap,0, len + 12);
c = p + 12;
// algo ici
HeapFree(hHeap, 0, p);
19 oct. 2004 à 22:56
merci
17 oct. 2004 à 18:34
17 oct. 2004 à 18:32
char *p = (char*) HeapAlloc(hHeap,0, len + 12);
c = p + 12;
// algo ici
HeapFree(hHeap, 0, p);
erreur: p est déja défini dans cette portée!
17 oct. 2004 à 18:03
On peut regrouper en 1 seul appel:
char *p = new char[12];
char *c = (char*) HeapAlloc(hHeap,0, len);
peut devenir en + rapide:
char *p, *c;
char *p = (char*) HeapAlloc(hHeap,0, len + 12);
c = p + 12;
// algo ici
HeapFree(hHeap, 0, p);
17 oct. 2004 à 17:10
merci
17 oct. 2004 à 16:37
17 oct. 2004 à 07:24
17 oct. 2004 à 00:05
je veux juste poser une question concernant les BDs et VC++? Un tuto ou un exple?
16 oct. 2004 à 15:24
je vois que vecchio n'a pas encore repondu a ma kestion...
16 oct. 2004 à 08:58
....allez, réconsillié vous! Entre parenthèse, moi aussi quand je met un commentaire, on me le "critique", mais ce n'est jamais une mauvaise critique c'est toujours pour essayer que je fasse mieux!! Faut pas s'enerver pour si peu bon sang....le potentiel de chacun est grand, et si on partage ce que l'on sait, on y ai tous gagnant ! :-))
Voila, dsl, 'pouvais pas supporté de voir une querelle sur ce genre de site!! bisous a tous!! :-)
Gendal67, a votre service !
10 oct. 2004 à 14:58
Aurevoir
10 oct. 2004 à 14:53
-reponse pour youness: merci mon ami.
-reponse pour alexman: desolé, je perds pas mon temps à lire tes remarques et tes commentaires, l'autre weekend je t'ai ecris un long message pour t'expliquer beaucoup de choses, et critiquer un peu ta participation dans ce site. et par curiosité j'ai parti voir ton profile et j'ai jeté un coup d'oeil sur tes sources et tes reponses aux forums, et tout ce que j'ai fait après c'est effacer mn message sans te l'envoyer, et decider de te negliger.merci pour ta comprhension
10 oct. 2004 à 13:50
10 oct. 2004 à 12:22
Pour les en-têtes précompilés, c'est vrai que c'est interessant pour les gros projets, mais la on ne peut pas dire que cce soit vraiment le cas.
wcex.lpszClassName = "FENETRES"; ce genre d'affectation se fait a la déclaration, sinon utiliser strcpy
Pourquoitu utilises des new et delete, puisque tu as en heap?
10 oct. 2004 à 10:58
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
hHeap=GetProcessHeap(); //obtenir le heap de l'application
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_FENETRES);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = "FENETRES";
wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);
if(!RegisterClassEx(&wcex))return(0); //enregistrement de la classe de la fenetre
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC)Dialog); //chargement de la boite de dialogue
return (0);
}
Pkoi tu initialise une structure WNDCLASSEX ? Tu appelles ici une dialogbox, ca n'a rien a faire ici !
Ensuite, ds ton appel a la fonction DialogBox, Tu peux eviter le cast du 4eme param en prototypant bien ta fonction :
BOOL CALLBACK DlgProc(..)
et non LRESULT...
WM_INITDIALOG doit renvoyer 1, donc TRUE et non pas FALSE.
Bon ben c tt pour le moment.
++
10 oct. 2004 à 10:52
Un ptit conseil deja : Crée un projet vide pour ne pas avoir ces "stdafx.xx" paske c chiant (tu peux ps compiler sans) et c moche (je trouve).
Et ensuite une kestion : Pkoi utiliser tchar.h et donc _tWinMain, TCHAR...Etc ?
Voila, merci
++