Accueil > Forum > > > > GetMem et compagnie
GetMem et compagnie
mercredi 2 juillet 2008 à 22:02:22 |
GetMem et compagnie

florenth
|
Salut à tous, Je me demandais, en adaptation d'un code C, s'il fallait modifier les fonctions d'allocation de mémoire par rapport au code original. En effet, on a plein de fonctions qui permettent d'allouer de la mémoire: - GetMem
- GlobalAlloc
- VirtualAlloc
- HeapAlloc
et bien sûr toutes les fonctions de libération associées. Mais finalement, quelle est la différence entre tout ça ? Si j'ai besoin d'un buffer de N octets, que vaut-il mieux prendre ? J'avais vu avec forman que dans certains cas on pouvait utiliser VirtualAlloc et demander à ce que tout soit dans une même page de mémoire pour éviter un bug avec GetDIBits(), mais finalement, je n'y comprends plus rien... La fonction à appeler dépend-elle de la taille du buffer à allouer (par exemple, GetMem bien pour N petit, mais HeapAlloc pour N "grand" ?) ou en fonction de l'utilisation à faire de la mémoire ? Bref, peu importe ce que vous savez là dessus, ça m'intéresse ! Merci d'avance ! Flo [ Lien ]
|
|
jeudi 3 juillet 2008 à 04:08:02 |
Re : GetMem et compagnie

f0xi
|
VirtualAlloc Reserves or commits a region of pages in the virtual address space of the calling process. Memory allocated by this function is automatically initialized to zero, unless MEM_RESET is specified. To allocate memory in the address space of another process, use the VirtualAllocEx function. HeapAlloc Allocates a block of memory from a heap. The allocated memory is not movable. GlobalAlloc Allocates the specified number of bytes from the heap. Note The global functions are slower than other memory management functions and do not provide as many features. Therefore, new applications should use the heap functions. However, the global functions are still used with DDE, the clipboard functions, and OLE data objects. sinon je pense que brunews expliquerais mieux que moi la difference entre VirtualAlloc et GetMem. je sais que lui qui travail beaucoup avec SSE et pas seulement, utilise VirtualAlloc pour une question "d'allignement des données". j'ai jamais vraiment saisis la nuance. je pense ensuite qu'il y a une difference de "cible" dans ces fonctions. GetMem alloue de la memoire mais on a peu de control sur cette allocation. mis a part l'accés en I/O sur la donnée pointée ... on peu pas faire grand chose de plus. VirtualAlloc ressemble fort a GetMem, mais fournit plus de control, apparement il semble qu'on puisse allouer des zone en I/O, I ou O, mais la encore, les subtilitées m'echape.
|
|
jeudi 3 juillet 2008 à 11:57:31 |
Re : GetMem et compagnie

florenth
|
J'avais bien vu la doc de la msdn. Mais quelle différence entre le "tas" (heap) et la mémoire "virtuelle". Y'en a une plus rapide que l'autre ? Parce que justement, comme VirtualAlloc permet à la mémoire d'être en R, W ou RW, c'est qu'il y a un mécanisme de contrôle... donc ça ralentit. J'ai vu aussi que VirtualAlloc permet de choisir si on veut que la mémoire reste dans la RAM ou si on autorise Windows à la mettre dans le fichier d'échange. J'ai aussi vu que cette fonction permet de choisir l'adresse qu'on voudrait allouer, et elle se débrouille pour trouver de la mémoire libre "pas trop loin". A quoi ça peut bien servir ? Tout ça pour dire que je cherche à manipuler un flux audio, avec le moins de latence possible, donc je voudrais la méthode qui me donne le max de perfs, mais aussi savoir comment fonctionne le chmilblic. A noter que GetMem est une fonction fouirnie par Delphi (équivalent je pense au malloc du C) alors que les autres sont des fonctions de Windows. Ressources Delphi, sources, tutoriaux, actu, ...: www.mx-dev.net [ Lien ]
|
|
jeudi 3 juillet 2008 à 17:30:57 |
Re : GetMem et compagnie

f0xi
|
alors si je me souviens bien, le heap c'est la memoire dynamique allouée en runtime au programme, il me semble que ce sont les quelques rares kilo-octets que l'on peu definir dans le compilo ou par directive de compilation. je risque de dire une connerie mais heap memory fait surrement reference a la "stack".  $00004000 = 16384 octets $00100000 = 1048576 octets (1Mo) $00400000 = 4194304 octets (4Mo) par contre, virtualalloc alloue la memoire dans l'espace virtuel, soit donc, la ram physique disponible, le cache disque ou la memoire paginné. donc a moins d'une ram pleine a ras bord et d'un disque dur plein a craquer, il est rare d'etre out of resources contrairement au tas qui est tout petit petit et vite remplis. a mon avis, prendre la ram physique est ce qu'il y a de mieux puisque c'est celle qui a l'accés le plus rapide (d'une centaines de Mo a plusieurs Go de bande passante).
|
|
jeudi 3 juillet 2008 à 17:35:41 |
Re : GetMem et compagnie
|
jeudi 3 juillet 2008 à 19:08:13 |
Re : GetMem et compagnie

florenth
|
Oui, il me semble que le tas et la pile utilisent le même espace mémoire: l'un le remplit par en bas et l'autre par en haut. Alors, pour mon truc sonore, je 'ai pas besoin de beaucoup de mémoire (genre max 20~30 Ko) donc autant taper dans le tas  , c'est à dire via HeapAlloc, puisque c'est de la mémoire entièrement physique, non  Par contre, si je veux avoir un "undo" de mes opérations de bitmap, alors je dois prendre dans la mémoire virtuelle, plus grosse... J'ai tout bon ? Ressources Delphi, sources, tutoriaux, actu, ...: www.mx-dev.net [ Lien ]
|
|
vendredi 4 juillet 2008 à 02:45:22 |
Re : GetMem et compagnie

f0xi
|
moi j'utiliserais pas la pile. parce que parfois tu pourrais ne pas avoir les 20-30Ko dispo. pour un undo, oui, memoire virtuelle mais mieux c'est le cache disque.
|
|
vendredi 4 juillet 2008 à 11:13:22 |
Re : GetMem et compagnie

florenth
|
Je peux faire un test et allouer ailleurs si jamais c'est pas disponible. Mais avant, il faudrait savoir si ça vaut le coup (niveau rapidité) ou pas. Pour le undo, si tu dis que VirtualAlloc peut choisir l'emplacement, alors c'est tout bon. Mais c'est sur que si tu as 60Mo à prévoir, là je pense que le disque serait utile pour les 55 derniers Mo et la mémoire virtuelle pour les 5Mo restants (car plus susceptibles d'être "undoés". Ressources Delphi, sources, tutoriaux, actu, ...: www.mx-dev.net [ Lien ]
|
|
Cette discussion est classée dans : code, mémoire, fonctions, compagnie, getmem
Répondre à ce message
Sujets en rapport avec ce message
mémoire locale et mémoire globale [ par Gerard ]
Bonjour, J'ai entrepris la refonte de mon serveur - qui marche par ailleurs très bien - une centaine de joueurs (de bridge) par jour dans l'objectif s
Editeur 3d avec du opengl [ par pestiferer ]
Bonjours! Voici donc, une liste de fonction qui se situe dans mon fichier de base. [code]uses Windows, Messages, SysUtils, Classes, Graphics, Contr
incrémentation du code [ par rafikjka ]
salut j'ai une base de donneés dont la forme est la suivante : code client nom prenom adresse profession je voulais faire attribuer la valeur 30
appeller l'evenement d'un autre composant [ par MohInfo ]
bonsoir à tous j'ai un petit soucis je veux implémenter dans un TmenuItem le méme code que celui d'un tButton qui se situe dans une autre form, comm
[CS]Comment ajouter un nouveau code-source : truc bizarre [ par pseudo3 ]
Bonjour, Petite question : On fait comment pour ajouter un nouveau code-source car je viens d'essayer et arrivé à "Etape 3 : Faciliter le referenceme
recherche dans le registre [ par casper150 ]
bonjour, je cherche le moyen de récupère une string dans le registre mais sans connaitre la clé je vous montre en code [code=pas]Var Registre : TRe
Remplacer un caractère par un autre [ par gpletinckx ]
Bonjour, Je voudrais que lors de la frappe du caractère apostrophe ou du caractère point-virgule, ceux-ci soient remplacés par un espace. J'ai réalis
Effacer la dernière image dessinée [ par Jean_Jean ]
Bonjour à tous, Non je ne programme pas sur la plage mais au milieu de mes cartons! Mais si comme je le pense vous avez emmené votre pc sur la plage
Livres en rapport
|
Derniers Blogs
[SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|