question sur l'allocation sur le tas
Bonjour
j'ai tenté de regarder dans les profondeurs du code de VC2010 ce qui concerne l'allocation dynamique par exemple, quand on fait int*n=new int;
J'ai vu que l'on appelle en fait une fonction qui s'appelle HeapAlloc.
On ne peut pas aller plus loin dans le code, puisque cette fonction se trouve dans la dll kernel32.dll:
Code:
1 2 3 4 5 6 7 8 9
| __forceinline void * __cdecl _heap_alloc (size_t size)
{
if (_crtheap == 0) {
_FF_MSGBANNER(); /* write run-time error banner */
_NMSG_WRITE(_RT_CRT_NOTINIT); /* write message */
__crtExitProcess(255); /* normally _exit(255) */
}
return HeapAlloc(_crtheap, 0, size ? size : 1);
} |
On a cependant la déclaration de cette fonction dans winbase.h
Code:
1 2 3 4 5
| HeapAlloc(
__in HANDLE hHeap,
__in DWORD dwFlags,
__in SIZE_T dwBytes
); |
Je voudrais savoir si ces fonctions sont les fonctions communes à l'ensemble des applications de Windows, et comme le code n'est pas en open source, on ne peut pas y accéder.
Cependant, j'ai trouvé ici quelque chose qui semble très proche.
http://source.winehq.org/source/dlls/ntdll/heap.c#L1623
Est-ce le code windows des fonctions dans les dll?
Cela me semblerait quand même étrange. Serait-ce le code source de Windows?
il semble qu'il y ait le code de toutes les fonctions de la dll concernant l'allocation sur le tas.