这里的"动态内存"包含以下两个方面的内容:
1.内存。这里的"内存"指的是进程的虚拟内存空间。在Win32环境下,每一个进程拥有独立的,大小为4G(0x0000 0000 ~ 0xFFFF FFFF)的虚拟内存空间。
2.动态。这里的"动态"指的是进程虚拟内存空间中的动态内存区域。在一个进程的虚拟内存空间中,只有动态内存可以在运行是被应用程序自由的分配/使用/释放。
在Win32环境下,我们可以使用多种方式来分配/使用/释放动态内存,这些方式包括:
1.Win32 API. 这些API包括VirtualXXX(),HeapXXX(),LocalAlloc(),GlobalAlloc()。
2.C Run-Time Library.这些函数包括malloc(),free()。
3.C++提供的关键词new和关键词delete。
有这么多的内存分配方式,我们在学习和实际项目中编码过程中常常会为使用那种方式而感到迷惑。他们的内部实现是否相同?他们之间有什么本质的区别?他们各自的使用场合又是怎样的? 本文试图通过深入探究他们的本质,为正确理解和使用他们提供一些依据。
首先,我们最好从全局的高度把握他们之间的关系。这里有一张图很好的描述了他们之间的层次关系:
这张图给了我们一个全景,仅从这张图我们就可以清楚地看到他们之间的层次关系:
第一层:Win32 API作为系统的接口,提供了一组操作虚拟内存的接口;
第二层:Hea