Salut,
Je me rappel que sur Atari (devpac) je définissais la taille de la pile dans le source et je me demandais bien comment cela se présentait sur pc. Ben voilà une réponse plus+ que complète, mais je dois avoué qu'il va me falloir un peu de temps pour digérer. En tout cas chapeau, je ne sais pas ou vous trouvez les infos pour faire un truc pareil mais sa mérite un 10.
@+
toute la mémoire du process est mappé en passant par la mémoire paginée que ce soit du code, des données, la pile, le heap, ...
la gestion du heap fait exactement ca, il réserve un bloc de mémoire avec VirtualAlloc, dans ce bloc réservé, une partie est allouée ( comit permet d'associer les blocs de memoire physique au reservations virtuelles ), si tu a besoin, le heap commit s'agrandi et sinon, on libère la memoire physique ( la memoire virtuelle restant réservée ).
ce que je ne comprends pas , c pourquoi le faire dans la pile alors que ca doit se faire dans le heap ?
Salut,
L'allocation dynamique pour la pile doit gérer de la mémoire paginée.La seule fonction mémoire capable de faire ça est virtualalloc qui travaille en adressage linéaire.
la pile sert effectivement pour les variables locales mais aussi pour les variables passées en paramètres.C'est elle qui contient les adresses de retour pour les proc,c'est elle enfin qui permet de faire du debuggage post-mortem par recherche dans son contenu.
Sa grosse faiblesse est qu'en cas de fautes il est extrèmement difficile de ratrapper le programme fautif.
TouEnMasm
Je me rappel que sur Atari (devpac) je définissais la taille de la pile dans le source et je me demandais bien comment cela se présentait sur pc. Ben voilà une réponse plus+ que complète, mais je dois avoué qu'il va me falloir un peu de temps pour digérer. En tout cas chapeau, je ne sais pas ou vous trouvez les infos pour faire un truc pareil mais sa mérite un 10.
@+
toute la mémoire du process est mappé en passant par la mémoire paginée que ce soit du code, des données, la pile, le heap, ...
la gestion du heap fait exactement ca, il réserve un bloc de mémoire avec VirtualAlloc, dans ce bloc réservé, une partie est allouée ( comit permet d'associer les blocs de memoire physique au reservations virtuelles ), si tu a besoin, le heap commit s'agrandi et sinon, on libère la memoire physique ( la memoire virtuelle restant réservée ).
ce que je ne comprends pas , c pourquoi le faire dans la pile alors que ca doit se faire dans le heap ?
@++
L'allocation dynamique pour la pile doit gérer de la mémoire paginée.La seule fonction mémoire capable de faire ça est virtualalloc qui travaille en adressage linéaire.
la pile sert effectivement pour les variables locales mais aussi pour les variables passées en paramètres.C'est elle qui contient les adresses de retour pour les proc,c'est elle enfin qui permet de faire du debuggage post-mortem par recherche dans son contenu.
Sa grosse faiblesse est qu'en cas de fautes il est extrèmement difficile de ratrapper le programme fautif.
TouEnMasm
l'allocation dynamique ca se fait pas dans le heap ?
y'a pas déjà une fonction pour ca ?
invoke GlobalAlloc,GPTR,cbBloc ?
and eax,eax
je badalloc
la pile, c'est pas pour les variables locales ?
@++
je jetterai un oeuil kand le temps m'en laissera le temps...