当前位置:首页 > 内存 > 正文

内存分配模式(内存分配的三种方式)

  • 内存
  • 2024-09-02 11:24:04
  • 7792

一、显卡的显存为什么分为专用显存和共享显存?
分配显存的方式主要有两种:共享GPU显存和专用GPU显存。 在目前的图形技术中,内存资源是共享的,这意味着如果你的电脑有8GB内存,其中2GB被显卡占用,那么系统实际可用的内存将显示为6GB。共享机制在一些早期也存在。独立图表,其工作原理与基本图表类似。 显存如何分配直接影响系统性能和应用程序兼容性。 了解这一基本概念对于优化计算机性能和选择适当的硬件配置至关重要。
与一些早期的独立显卡不同,一些现代高端GPU可以配备专用显存。 该内存独立于系统内存,可以提供更流畅的游戏体验和图形处理能力。 当显卡拥有专用内存时,即使系统内存有限,也能保证图形任务高效运行,而不会对整体系统资源造成太大影响。
综上所述,显存使用方式可以是共享的,如基本显卡,也可以是专用的,如一些高端独立显卡。 选择哪种模式取决于显卡的类型和设计,以及用户的性能需求。 了解这些基本概念可以帮助您在购买和设置计算机时做出更明智的决定。


二、内存分配是什么意思? Windows中的内存分配方式有哪些?
1 Win32堆分配函数
每个进程都可以使用堆分配函数来创建私有堆——调用进程地址空间中的一个或多个页面。 DLL创建的私有堆必须位于调用DLL的进程的地址空间中,并且只能被调用进程访问。
HeapCreate 用于从堆中分配指定量的空间,用于从指定堆中释放空间。
2 传统的Windows全局或局部内存分配函数
由于Win32采用平面内存结构模式,所以Win32下的全局和局部内存函数除了名称不同外,其他完全相同。 这两个函数都可用于分配任意大小的内存(仅受可用物理内存的限制)。 使用方法与Win16基本相同。
在Win32下保留此类函数可以保证与Win16的兼容性,因此不再建议使用它。
3 标准C语言内存分配函数
标准C语言内存分配函数包括以下函数:
malloc、calloc、realloc、free等。
这些函数最终都会映射到堆API函数,因此malloc分配的内存不能被移动。 这些函数的修补版本有 malloc_dbg、calloc_dbg、realloc_dbg、free_dbg 等。
32虚拟内存分配函数
虚拟内存API是其他API的基础。 驱动程序 new->malloc->HeapAlloc->VirtualAlloc->_PageAlloc 。
虚拟内存API使用页作为最小分配单位。 X86 上的页面长度为 4 KB。 您可以使用 GetSystemInfo 函数来检索页面的长度。
虚拟内存分配函数包括以下函数:
LPVOIDVirtualAlloc(
LPVOIDlpvAddress,
DWORDcbSize,
DWORDfdwAllocationType,
DWORDfdwwProtFunction); 用于共享一定范围的虚拟页面。
参数1指定起始地址;
参数2指定分配内存的长度;
参数3指定分配方式,取值MEM_COMMINT或MEM_RESERVE;
参数4指定访问方式控制本次分配的内存的标识符,值为PAGE_READONLY、PAGE_READWRITE或PAGE_NOACCESS。
LPVOIDVirtualAllocEx(
HANDLEprocess,
LPVOIDlpvAddress,
DWORDcbSize,
DWORDfdwAllocationType,
DWORDfdwProtect此函数全部为
); ,但允许指定的进程进程。 VirtaulFree、VirtualProtect和VirtualQuery都有相应的扩展功能。
BOOLVirtualFree(
LPVOIDlpvAddress,
DWORDdwSize,
DWORDdwFreeType);
该函数用于回收或释放分配的虚拟内存。
参数1指定要检索或释放的内存基地址;
如果是检索,参数2可以指向虚拟地址范围内的任意位置,如果是释放,则必须2 VirtualAlloc返回的地址; 参数3指定是否释放或回收内存,值为MEM_DECOMMINT或MEM_RELEASE。
BOOLVirtualProtect(
LPVOIDlpvAddress,
DWORDcbSize,
DWORDfdwNewProtect,
PDWORDpfdwOldProtect);
该函数用于将指定页面更改为 Protective页。
参数1指定给定页面的基地址;
参数2指定保护页面的长度;
参数3指定页面的保护属性,值为​​​​PAGE_READ 、PAGE_WRITE、PAGE_READWRITE等;
参数4用于返回原来的保护属性。
DWORDVirtualQuery(
LPCVOIDlpAddress,
PMEMORY_BASIC_INFORMATIONlpBuffer,
DWORDdwLength
);
该函数用于查询指定页面的特征记忆 。
参数1指向你要搜索的虚拟地址。
BOOLVirtualLock(
LPVOIDlpAddress,
DWORDdwSize);
该函数用于锁定内存。锁定内存的页面不能与页面文件进行交换。
参数1指定要锁定的内存的起始地址
参数2指定锁定的长度。
BOOLVirtualUnLock(
LPVOIDlpAddress,
DWORDdwSize);
参数1指定要解锁的内存起始地址;
参数2指定要解锁的内存长度解锁。
摘自日落之家