(malloc : question toute bete) - C++ - Programmation
Marsh Posté le 21-11-2002 à 17:59:33
à priori, je dirais en mémoire virtuelle (oui, "virtual memory", on peut aussi appeler ça mémoire virtuelle !), mais je suis pas sûr du tout !
Marsh Posté le 21-11-2002 à 18:43:07
ah ... alors ki ki a raison ? a moins que le tas soit ds la mémoire virtuelle ?
Marsh Posté le 21-11-2002 à 19:14:22
A priori, c'est pas dans la pile
Virtual memory/heap, c'est la même chose, non
Marsh Posté le 21-11-2002 à 19:37:22
euh ... bin tiens 3 avis différents ... ma vla bien ...
Heap/mem.virt. je pense pas que ce soit la mm chose car il y a 2 api differentes a chaque fois (sous win32)
(VirtualAlloc/HeapAlloc, HeapCreate, HeapFree/VirtualFree, HeapRealloc, VirtualProtect, etc ...)
aussi d'apres ce que g compris ds les msdn un prog peut avoir plusieurs Heaps, mais bien sur qu'un seul espace mémoire (mémoire virtuelle du process)
Marsh Posté le 21-11-2002 à 19:52:26
C dans le Heap c tout. Ensuite que le Heap soit effectivement en RAM ou dans le swap on s'en fiche. En tout cas ce qui est sur c que ça alloue pas dans la pile puiske la pile sert au variable local et au bon fonctionnement des apelles de fonction surtout
Marsh Posté le 21-11-2002 à 20:28:58
oui, musaran vient ns expliquer en détail )))
Marsh Posté le 21-11-2002 à 20:33:55
extrait de la page de man :
tas (zone de mémoire dans laquelle sont allouées les variables dynamiques) |
Marsh Posté le 21-11-2002 à 21:07:00
BlackGoddess a écrit a écrit : ah ... alors ki ki a raison ? a moins que le tas soit ds la mémoire virtuelle ? |
C'est peut être ca tout simplement.
La mémoire virtuelle, c'est une manière d'accéder à la mémoire, celle ci étant gérée en plusieurs zones (le "tas", la pile...)
Marsh Posté le 22-11-2002 à 01:48:11
pile - stack
Zone de mémoire ou sont allouées les variables locales, placé les arguments et valeurs de retour de fonctions, les variables temporaire du compilateur.
Elle est unique pour chaque thread, sa caractériqtique est qu'on ne peut en enlever les éléments que dans l'ordre inverse où ils y ont été placés.
Il n'est pas indispensable qu'un système aie une pile.
tas - heap
Zone de mémoire à partir de laquelle on alloue et désalloue à volonté, dans l'ordre qu'on veut, sur commande.
Il peut y avoir plusieurs tas (Le C standard n'en gère qu'un).
statique - static
Segment de mémoire où sont placés les objets ayant la même durée de vie que le programme. Aucun dynamisme, pas d'allocation/désallocation.
Il peut y avoir plusieurs segments, typiquement:
1 pour les variables
1 pour les constantes
1 pour le code
registre-register
Des cases mémoires intégrées au processeur.
Leur "adressage" est contenu dans les instructions.
Notion différente:
virtuelle - virtual
Mécanisme intégré au processeur qui lui permet de simuler la présence de mémoire et d'intercepter et rediriger les appels de celle-ci vers un autre emplacement dans la mémoire physique.
C'est très puissant, cela permet de décharger des zones de la mémoire physique, et de les y remettre de façon transparente en cas d'accès.
Ce sera tout pour ce soir, j'espère que ça suffira.
Marsh Posté le 22-11-2002 à 08:43:16
BlackGoddess a écrit a écrit : euh ... bin tiens 3 avis différents ... ma vla bien ... Heap/mem.virt. je pense pas que ce soit la mm chose car il y a 2 api differentes a chaque fois (sous win32) (VirtualAlloc/HeapAlloc, HeapCreate, HeapFree/VirtualFree, HeapRealloc, VirtualProtect, etc ...) aussi d'apres ce que g compris ds les msdn un prog peut avoir plusieurs Heaps, mais bien sur qu'un seul espace mémoire (mémoire virtuelle du process) |
je pe te certifié k "el gringo" a rèson car j è eu 1 fuite de mémoire en en fesan 1 peti CTRL-alt-suppr pour metr le gestionair dè tache é vérifié l éta de la RAM j è constaté kel ogmentai =>
Marsh Posté le 22-11-2002 à 09:27:34
nicolasm a écrit a écrit : je pe te certifié k "el gringo" a rèson car j è eu 1 fuite de mémoire en en fesan 1 peti CTRL-alt-suppr pour metr le gestionair dè tache é vérifié l éta de la RAM j è constaté kel ogmentai => |
Non, j'ai pas raison...
A ce que j'ai compris, le heap peut être en mémoire Virtuelle.
La question était mal posée, parce que "mémoire virtuelle" n'avait rien à faire dans les propositions.
Bref, le vraie réponse, c'est : dans le heap (tas).
Marsh Posté le 22-11-2002 à 09:32:01
nicolasm a écrit a écrit : je pe te certifié k "el gringo" a rèson car j è eu 1 fuite de mémoire en en fesan 1 peti CTRL-alt-suppr pour metr le gestionair dè tache é vérifié l éta de la RAM j è constaté kel ogmentai => |
aïe aïe aïe ! mes pauvres yeux !
Marsh Posté le 22-11-2002 à 09:38:09
lorill a écrit a écrit : aïe aïe aïe ! mes pauvres yeux ! |
encore un cas où j'ai dû relire pour être sûr d'avoir saisi l'essence de ses propos
nicolasm > j'aime pas lire du phonétique!
Marsh Posté le 22-11-2002 à 10:11:00
sombresonge a écrit a écrit : C dans le Heap c tout. Ensuite que le Heap soit effectivement en RAM ou dans le swap on s'en fiche. En tout cas ce qui est sur c que ça alloue pas dans la pile puiske la pile sert au variable local et au bon fonctionnement des apelles de fonction surtout |
A priori quand tu fais un malloc l'allocation est faite dans la RAM, c'est ensuite qu'enventuellement cette zone sera mappee dans le swap en fonction de l'etat des ressources du systeme...
Marsh Posté le 22-11-2002 à 10:50:47
drasche a écrit a écrit : encore un cas où j'ai dû relire pour être sûr d'avoir saisi l'essence de ses propos nicolasm > j'aime pas lire du phonétique! |
C est super pratique surtout quand tu as appris a lire grace a ca!Et puis pour les textos ca aide car le nombre de caractere est limite!!!
En plus,je suis un peu faineant en ce qui concerne l ecriture mais la j ai fait un effort pour les yeux de ceux qui n aiment pas.
Marsh Posté le 22-11-2002 à 10:54:48
nicolasm a écrit a écrit : C est super pratique surtout quand tu as appris a lire grace a ca! |
mouaif... Et quand tu as appris a lire du code ecrit par des porcs, c'est super pratique de rester goret...
nicolasm a écrit a écrit : En plus,je suis un peu faineant en ce qui concerne l ecriture mais la j ai fait un effort pour les yeux de ceux qui n aiment pas. |
merci
Marsh Posté le 22-11-2002 à 11:12:34
suis 100% d'accord avec Lorill. Ce n'est pas parce que les autres disent blanc que je vais dire blanc aussi. On m'a appris à avoir un libre arbitre, je m'en sers, je n'ai aucune envie d'être un mouton. D'autre part on ne peut pas préjuger à l'avance de qui va nous lire, en particulier sur un forum public. Il y certainement des gens qui viennent, qui lisent, et qui tentent d'abord de décrypter le message. Qu'un forum public devienne un ghetto où on développe sa propre grammaire/syntaxe/orthographe d'élite à deux balles, je ne suis pas d'accord.
Quant à coder comme un goret (pour citer Lorill), je dis non aussi, j'ai assez vu de crasses dans ma pourtant petite expérience professionnelle, et je ferai tout pour tendre vers le haut, et tenter de partager cette expérience avec mes pairs.
Le nombre de caractères est certainement limité pour un post, mais là, je viens de pondre une tartine sans faire vraiment faire défaut à mon idée de l'expression. Donc écrire seulement une ou deux lignes dans un post ne justifie pas pour moi de "compresser" mes mots. Sans rancune
Marsh Posté le 22-11-2002 à 15:30:15
lorill a écrit a écrit : mouaif... Et quand tu as appris a lire du code ecrit par des porcs, c'est super pratique de rester goret... merci |
Je parlais des textes et pas du code,il va de soi que j ecris mon code selon des normes qui me semble correcte pour que l on puisse me debugguer par exemple
Et puis j avoues que j ai encore a apprendre mais celui qui pretend qu il sait tout est un ignorant!
Je veux pas etre medisant non plus mais tu fais parfois du code obscur pour les nouveaux et ca aussi c est GORET si tu l explique pas!
Marsh Posté le 22-11-2002 à 15:36:43
nicolasm a écrit a écrit : Je parlais des textes et pas du code,il va de soi que j ecris mon code selon des normes qui me semble correcte pour que l on puisse me debugguer par exemple |
Ben pourquoi pas en français alors ? Il y a aussi une syntaxe et une grammaire normalisées, tu sais. Même si ca n'a pas besoin de compiler...
nicolasm a écrit a écrit : Je veux pas etre medisant non plus mais tu fais parfois du code obscur pour les nouveaux et ca aussi c est GORET si tu l explique pas! |
Blague a part, on se connait ? T'as déja vu de mon code ? ou tu parles par rapport a mes messages ici ?
Et sinon, je ne suis pas pour commenter toutes les lignes, quand je programme, je m'adresse a un public de programmeur, censé connaitre le langage. Donc j'explique mes methodes et mes astuces (si y'en a, ce qui est rare), mais pas les trucs compréhensibles.
Marsh Posté le 22-11-2002 à 15:41:14
drasche a écrit a écrit : 1: suis 100% d'accord avec Lorill. Ce n'est pas parce que les autres disent blanc que je vais dire blanc aussi. On m'a appris à avoir un libre arbitre, je m'en sers, je n'ai aucune envie d'être un mouton. D'autre part on ne peut pas préjuger à l'avance de qui va nous lire, en particulier sur un forum public. Il y certainement des gens qui viennent, qui lisent, et qui tentent d'abord de décrypter le message. Qu'un forum public devienne un ghetto où on développe sa propre grammaire/syntaxe/orthographe d'élite à deux balles, je ne suis pas d'accord. 2: Quant à coder comme un goret (pour citer Lorill), je dis non aussi, j'ai assez vu de crasses dans ma pourtant petite expérience professionnelle, et je ferai tout pour tendre vers le haut, et tenter de partager cette expérience avec mes pairs. 3: Le nombre de caractères est certainement limité pour un post, mais là, je viens de pondre une tartine sans faire vraiment faire défaut à mon idée de l'expression. Donc écrire seulement une ou deux lignes dans un post ne justifie pas pour moi de "compresser" mes mots. Sans rancune |
1 :
je n ai pas dit le contraire et je pourrais continuer a ecrire comme je l ai fait en amont.Et pourquoi "elite" vous avez des ego demesures?
2 :
coder comme un goret,ca ca depend des normes que vous utilisez car un developpeur a ces manies car il est homme avant tout mais pour ma part je ne pense pas car je suis plutot les conseils donnees notamment sur ce forum(cf note sur le debuggage).
3:
Il faut comprendre un enonce et la je parlais de textos!!!Pas de post!!!
Avouez mais que dans certain cas ca peut etre utile notamment quand vous voulez converser avec des gens qui utilise ce language.
Bon sur ceux j arrete car ce n est pas le sujet du topic.
Marsh Posté le 22-11-2002 à 15:44:07
lorill a écrit a écrit : Ben pourquoi pas en français alors ? Il y a aussi une syntaxe et une grammaire normalisées, tu sais. Même si ca n'a pas besoin de compiler... Blague a part, on se connait ? T'as déja vu de mon code ? ou tu parles par rapport a mes messages ici ? Et sinon, je ne suis pas pour commenter toutes les lignes, quand je programme, je m'adresse a un public de programmeur, censé connaitre le langage. Donc j'explique mes methodes et mes astuces (si y'en a, ce qui est rare), mais pas les trucs compréhensibles. |
c est par rapport aux post en effet que je ne vous connait pas.
On peut etre un newbie a different niveuax et ca aussi faut pouvoir l evaluer . "newbie en programmation != newbie dans un langage."
Marsh Posté le 22-11-2002 à 16:32:08
>> El_Gringo : c sur apres l'explication de Musaran, la question était très mal pausée ... merci a vs pour ces réponses, mais merci aussi si vs voulez continuer votre passionante discussion sur le francais de le faire en dehors de cette partie du forum.
Marsh Posté le 24-11-2002 à 11:49:50
heap, stack, segment data.
Ca c'est le modele generalement admis en programmation sur des OS qui ont repris la semantique de la programmation structuree .
Je voudrais juste preciser que ce ne sont pas les seuls modeles qui existent. Il y a aussi le mode "plat" ou l'on accede a la memoire de maniere unifiee, charge au programmeur de se fixer ses propres regles (c'est ce que fait malloc dans votre dos, il doit maintenir une liste des objets alloues et des parties libres).
Comme le precisait Musaran, la pile existe.. ou pas. C'est un heritage de la prog structuree et c'est juste super pratique. Mais rien n'empeche meme un compilateur C d'allouer des variables locales sur le tas en ne stockant un pointeur dans une pile qu'en cas de recursion. Certains langages limitent ce degre de recursion et permettent donc de se passer de pile (au sens du C).
A+
LeGreg
Marsh Posté le 24-11-2002 à 22:30:07
nicolasm a écrit a écrit : c est par rapport aux post en effet que je ne vous connait pas. |
???
LeGreg
Marsh Posté le 24-11-2002 à 23:36:10
Personne n'a tranché alors ? j'arrive pas à suivre. Selon mes cours c'était clairement dans le heap. C'est la que les new du c++ se tapaient... Le stack, c'était pour gérer les appels de fonctions et tout ça.
Marsh Posté le 25-11-2002 à 02:41:07
Taz@PPC a écrit a écrit : les allocations dynamiques ne se font pas forcrément dans la pile (cf. alloca) |
Tu veux dire le tas ?
belgique a écrit a écrit : Personne n'a tranché alors ? j'arrive pas à suivre. |
malloc et new allouent dans le tas/heap.
En fait, aucune méthode d'allocation en particulier n'est fondamentalement obligée d'exister.
Le statique/segment est nécessaire pour les éléments globaux, dont les fonctions dans la plupart des langages.
La pile est indispensable à la récursion, et à la transmission de valeurs entre fonctions sans registre. (Je rajoute les registres).
Effectivement très pratique.
Le tas est indispensable pour librement maîtriser la durée de vie à l'exécution.
On peut utiliser bien d'autres méthodes d'allocation, à coder soi-même.
Et d'autres que je ne connaît même pas.
A noter que les patrons STL C++ ont un paramètre allocateur.
Un jour, je saurais peut-être m'en servir...
Marsh Posté le 21-11-2002 à 17:57:00
malloc alloue la mémoire ou ? ds la pile ? le heap ? en virtualmemory ?
---------------
-( BlackGoddess )-