Les fonctions d'allocation de mémoire et les instructions du langage comme malloc/free et new/delete ne sont pas des appels système. Malloc \free fait partie du C \C ++ bibliothèque et nouveautés \delete fait partie du système d'exécution C++. Les appels de ces deux éléments peuvent occasionnellement conduire à des appels système. Dans les autres langages, l'allocation de mémoire est implémentée de manière similaire.
En général, la gestion de la mémoire ne peut pas être mise en œuvre sans impliquer le système d'exploitation, car la mémoire est l'une des principales ressources du système et, de ce fait, la gestion globale de la mémoire est assurée par le noyau du système d'exploitation. Mais étant donné que les appels système sont relativement coûteux, les gens essaient de concevoir des langages et des bibliothèques d'allocation de mémoire de manière à minimiser le nombre d'appels système.
Comme je le sais, le tas est une entité intra-processus. Cela signifie que toutes les demandes d'allocation/désallocation de mémoire sont entièrement gérées par le processus lui-même. Le système d'exploitation ne connaît que l'emplacement et la taille du tas et répond à deux types de demandes du système de gestion de la mémoire intra-processus :
add memory page at virtual address X
release memory page from virtual address X
Le système de gestion de la mémoire locale demande ces services lorsqu'il décide qu'il n'a pas assez de mémoire dans le pool de mémoire du tas et lorsqu'il décide qu'il a trop de mémoire dans le pool de mémoire du tas. Malgré le fait que l'allocation de mémoire soit généralement conçue de manière à minimiser le nombre d'appels système, elle reste toujours plus chère que l'allocation de mémoire sur la pile. Ceci est dû au fait que l'allocation de mémoire \deallocation Les algorithmes du tas sont beaucoup plus complexes et coûteux que ceux de la pile.