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

内存的主要分配方式有哪些

  • 内存
  • 2024-06-08 12:32:35
  • 4138

一、存储空间的分配技术有哪些?存储空间分配技术可分为以下几种:
静态分配:静态分配是指为计算机系统中的程序或数据分配特定的存储空间,所分配的空间在运行过程中不会发生变化。程序的执行。静态分配的优点是简单、快速,缺点是空间利用率低,容易浪费或空间不足。
动态分配:动态分配是指在程序运行过程中,根据需要动态地为程序或数据分配存储空间。动态分配的优点是可以充分利用存储空间,避免空间浪费或不足,但缺点是空间分配和释放的过程复杂,容易出现内存泄漏或空间碎片等问题。
页分配:页分配是指将存储空间划分为固定大小的页,按页分配程序或数据。该技术可以充分利用存储空间,避免空间浪费,避免空间碎片问题,但需要一定的开销来维护页表等数据结构。
段分配:段分配是指将存储空间划分为逻辑段,为程序或数据分配不同大小的段空间。这些技术可以更好地满足不同程序或数据的存储需求,但需要考虑内存碎和段大小等问题。
段页分配:段页分配是指将存储空间划分为段,然后将每个段划分为固定大小的页,将程序或数据划分为段和页。该技术可以更好地结合分段和页分配的优点,但必须处理复杂的地址映射和内存管理问题。
不同的存储空间分配技术适合不同的应用和计算场景,应根据具体需求和实际情况进行选择和优化。
二、内存分配是什么意思?windows中的内存分配方式有哪些?1、Win32的堆分配函数每个进程都可以使用堆分配函数来创建一个私有堆——调用进程空间中的一个或多个页面。DLL创建的私有堆必须位于调用DLL的进程空间中,并且只能由调用进程访问。
HeapCreate用于创建堆;用于释放堆栈空间。
s传统的全局或局部内存分配函数由于Win32使用平面内存设备,所以Win32下的全局和局部内存函数除了名字不同外,其他都是一模一样的。这两个函数都可以用来分配任意大小的内存(仅受可用物理内存的限制)。基本用法可以和Win16下一样。
Win32下的此类功能保证了Win16的兼容性,因此不建议使用。
3.
malloc、calloc、realloc、free等。
这些函数最终在函数API中提供,因此malloc分配的内存无法移动。这些函数的调试版本有malloc_dbg、calloc_dbg、realloc_dbg、free_dbg等。
32函数给出的内存功率
内存功率API是其他API的基础。新->malloc->HeapAlloc->VirtualAlloc->driver_PageAlloc。
虚拟内存API使用页作为最小的分配单位。X86上的页长度为4KB。
虚拟内存分配函数包括以下函数:
LPVOIDVirtualAlloc(
LPVOIDlpvAddress,
DWORDcbSize,
DWORDfdwAllocationType,
DWORDfdwProtect);
该函数用于扩展某些虚拟页面。
参数1指定源地址;
参数2指定分配的内存长度;
参数3指定分配方式,取值MEM_COMMINT或MEM_RESERVE;
参数4指定此时的访问控制MemoryIdentifier被赋予值PAGE_READONLY、PAGE_READWRITE或PAGE_NOACCESSU。
LPVOIDVirtualAllocEx(
PROCESS,
LPVOIDlpvAddress,
DWORDcbSize,
DWORDfdwAllocationType,
DWORDfdwProtect);
功能与VirtualAlloc类似,但允许确定性过程。VirtualFree、VirtualProtect、VirtualQuery都有相应的扩展功能。
BOOLVirtualFree(
LPVOIDlpvAdrese,
DWORDdwSize,
DWORDdwFreeType);
调用或释放该函数来分配虚拟内存。
参数1给出要重复或释放的内存基址的地址;
如果重复,参数2可以指向VirtualAlloc返回的虚拟地址范围内的某个位置;
参数3指定是否释放或重复内存,值MEM_DECOMMINT或MEM_RELEASE。
BOOLVirtualProtect(
LPVOIDlpvAdrese,
DWORDcbSize,
DWORDfdwNoviProtect,
PDWORDpfdwOldProtect);
此函数用于将页面更改为受保护的页面页。
参数1指定分配页的地址基址;
参数2指定受保护页的长度;
参数3指定页的保护属性,取值为PAGE_READ,PAGE_WRITE、PAGE_READWRITE等;
参数4用于返回原来的保护属性。
DWORDVirtualQuery(
LPCVOIDlpAddress,
PMEMORY_BASIC_INFORMATIONlpBuffer,
DWORDdwLength
);
该函数用于搜索定义在记忆。
参数1要查询的虚拟地址点;
参数2是指向设备基本内存数据的指针;
BOOLVirtualLock(
LPVOIDlpAddress,
DWORDdwSize);
该函数用于锁定内存。
参数1指定要锁定的内存地址;
BOOLVirtualUnLock(
LPVOIDlpAddress,
DWORDdwSize);
参数1指定要解锁的内存的起始地址;
参数2给出长度待解锁的内存。
摘自《太阳之家》