Sous Windows, dans les versions récentes de MSVC, malloc (et C++ new
, car il est implémenté en utilisant les mêmes principes fondamentaux pour la partie d'allocation de mémoire réelle de new
) appelle HeapAlloc()
. Dans d'autres versions, telles que g++ mingw, le runtime C est une version plus ancienne, qui n'appelle pas aussi directement HeapAlloc
, mais à la base, ça va toujours à HeapAlloc
- pour trouver quelque chose de différent, nous devons revenir à Windows antérieur à 95, qui avait un GlobalAlloc
et LocalAlloc
ensemble de fonctions - mais je ne pense pas que les gens utilisent des compilateurs 16 bits de nos jours - du moins pas pour la programmation Windows.
Sous Linux, si vous utilisez glibc
, cela dépend de la taille de l'allocation si elle appelle sbrk
ou mmap
- mmap
(avec MAP_ANONYMOUS
dans les drapeaux) est utilisé pour des allocations plus importantes (au-delà d'un seuil, qui, je crois, est de 2 Mo dans l'implémentation typique)
malloc() et ses amis sont considérés comme faisant partie du système d'exécution fourni avec un compilateur. Ainsi, chaque compilateur peut utiliser et utilise différents appels de système d'exploitation pour implémenter malloc.
Comme d'autres l'ont dit, sous Linux, les options sont sbrk() et mmap().
Sous Windows, les options sont HeapAlloc() et VirtualAlloc().
Ma question est la suivante :comment malloc est-il implémenté dans les systèmes d'exploitation suivants ?
Sous Linux il y a deux fameux malloc
implémentations :
dlmalloc (malloc de Doug Lea)
ptmalloc
Sur Linux libc comme glibc, eglibc ou newlib implémentez ptmalloc ou une variante de ptmalloc.
quelles sont les fonctions spécifiques au système d'exploitation qui sont appelées/implémentations de malloc() ?
Sur les systèmes Unix et Linux sbrk
et mmap
les appels système sont utilisés. Voir man 2 sbrk
et man 2 mmap
pour plus d'informations.
D'accord, je ne suis pas sûr pour Linux, mais quand il s'agit de Windows...
La mémoire peut être allouée à deux endroits classés.
1) Heaps (Process Heap, Custom Created Heaps) voir -> http://msdn.microsoft.com/en-us/library/windows/desktop/aa366711(v=vs.85).aspx en utilisant des fonctions comme HeapAlloc &HeapFree. LocalAlloc et LocalFree peuvent être utilisés comme "raccourcis" vers HeapAlloc lorsque vous souhaitez allouer dans le tas de processus par défaut.
2) Mémoire virtuelle (généralement uniquement spécifique au processus en raison des restrictions d'accès dans la mémoire virtuelle globale pour la sécurité), en utilisant VirtualAlloc, VirtualFree. voir -> http://msdn.microsoft.com/en-us/library/windows/desktop/aa366916(v=vs.85).aspx
À ma connaissance, malloc utilisera les fonctions d'allocation de tas sur Windows.
J'espère que cela vous aidera.