摘要:
Windows提供了3种进行内存管理的方法,它们是: • 虚拟内存,最适合用来管理大型对象或结构数组。 • 内存映射文件,最适合用来管理大型数据流(通常来自文件)以及在单个计算机上运行的多个进程之间共享数据。 • 内存堆栈,最适合用来管理大量的小对象。在地址空间中保留一个区域通过调用VirtualAlloc函数,可以在进程的地址空间中保留一个区域: [代码]第一个参数pvAddress包含一个内存地址,用于设定想让系统将地址空间保留在什么地方。在大多数情况下,你为该参数传递NULL。它告诉VirtualAlloc,保存着一个空闲地址区域的记录的系统应该将区域保留在它认为合适的任何地方。系统可以 阅读全文
摘要:
系统信息许多操作系统的值是根据主机而定的,比如页面的大小,分配粒度的大小等。这些值决不应该用硬编码的形式放入你的源代码。相反,你始终都应该在进程初始化的时候检索这些值,并在你的源代码中使用检索到的值。GetSystemInfo函数将用于检索与主机相关的值[代码]SYSTEM_INFO数据结构的样子。[代码]与内存有关的成员函数(其它变可参看MSDN)dwPageSize 用于显示CPU的页面大小。在x86 CPU上,这个值是4096字节。在Alpha CPU 上,这个值是8192字节。在IA-64上,这个值是8192字节lpMinimumApplicationAddress用于给出每个进程的可 阅读全文
摘要:
进程的虚拟地址空间每个进程都被赋予它自己的虚拟地址空间。对于32位进程来说,这个地址空间是4GB,(这是个虚拟地址空间,不是物理地址空间)。32位指针可以拥有从0x00000000至0xFFFFFFFF之间的任何一个值。这使得一个指针能够拥有4 294 967 296个值中的一个值,它覆盖了一个进程的4GB虚拟空间的范围。对于64位进程来说,这个地址空间是16EB(1018字节),64位指针可以拥有从0x0000000000000000至0xFFFFFFFFFFFFFFFF之间的任何值。这使得一个指针可以拥有18 446 744073 709 551 616个值中的一个值,它覆盖了一个进程的1 阅读全文