私有内存的申请与释放

Posted hanhandaren

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了私有内存的申请与释放相关的知识,希望对你有一定的参考价值。

1.私有内存指的是物理页自己用,无法共享

2.同样一块内存被多个进程共享时,则为共享内存Map

  


一、申请内存的两种方式:

  1. 通过VirtualAlloc/VirtualAllocEx申请的:Private Memory  //底层的实现完全一样
  2. 通过CreateFileMapping映射的:Mapped Memory

 

二、内存的申请与释放:

LPVOID VirtualAlloc
LPVOID lpAddress, // 要分配的内存区域的地址
DWORD dwSize, // 分配的大小
DWORD flAllocationType, // 分配的类型
DWORD flProtect // 该内存的初始保护属性
;
 
BOOL VirtualFree(
LPVOID lpAddress, // 区域地址
SIZE_T dwSize, // 区域大小,字节
DWORD dwFreeType // 类型);
// 私有内存申请.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <windows.h>

int main()

    LPVOID P = VirtualAlloc(
        NULL, // 要分配的内存区域的地址
        0x1000 * 2, // 分配的大小
        MEM_COMMIT, // 分配的类型 MEM_COMMIT占住并分配物理页
        PAGE_READWRITE // 该内存的初始保护属性  可读可写
    );
    //释放申请的内存
    VirtualFree(P, 0x1000 * 2, MEM_DECOMMIT);
    //VirtualFree(P, 0, MEM_RELEASE);//彻底释放

new的本质就是malloc;但是他们不是真正申请内存,只是从已有内存中,再申请一小块自己用(堆内存)

//malloc -》 HeapAlloc -》 没有进内核

 

 

以上是关于私有内存的申请与释放的主要内容,如果未能解决你的问题,请参考以下文章

(十一)golang 内存分析

adreno源码系列私有内存申请

adreno源码系列私有内存申请

js的内存释放初步理解

jvm内存模型

3.2 模拟面试