http://blog.csdn.net/zj510/article/details/39400087

内存管理有三种方式:

1. 虚拟内存,VirtualAlloc之类的函数

2. 堆,Heapxxx函数,malloc,new等

3. 内存映射文件,Memory Mapped File

很多人都会困惑,但是看下面的图片就会比较明白了。这个图片从MSDN上拷来。

堆和虚拟内存,从上面的图片就可以看出,其实所谓的堆,也就是在虚拟内存上抽象出来的。如果直接用Virtualxxx系列函数,是有一些限制的,比如每次只能分配页大小倍数的内存,内存地址也必须对齐什么的。新手很难用。正因为如此,才出现了堆。实际上堆Heap内部就是使用Virtual系列函数的。基本思想就是:先用VirtualAlloc分配一个比较大的内存,然后用户每次申请堆内存的时候,从分配出来的虚拟内存块上指定一块给用户。比如第一次分配堆内存从A地址开始的100个字节,第二次分配的时候就是A+100开始。

Memory Mapped File就不太一样了,从上面的图可以看出MMF并没有调用Virtual系列函数。它直接调用内核层了。

对于malloc和new,这2个并不是操作系统API,它们是语言提供的函数。在不同的系统上面有不同的实现方法,在Windows上面,new调用malloc,malloc调用堆函数(heapxxx),堆函数调用Virtual系列函数。在Linux上面就调用相应的linux API.

虚拟内存(VirtualAlloc),堆(HeapAlloc/malloc/new)和Memory Mapped File相关推荐

  1. Axi memory mapped to PCI Express、uart和gpio IP核在vivado中的应用

    先了解了一下几个PCIE IP核,网上这样说(链接: [https://www.amobbs.com/thread-5693775-1-1.html] 7 Series Integrated Bloc ...

  2. C语言之内存管理初探:栈和堆、malloc、calloc、realloc、free

    一. 进程空间 二.进程空间图示   程序被加载到内存以后,0-4G的内存空间.这0-4G内存中的布局如下图: 三. 栈内存 1.栈存储的特点:   栈的大小并不大,他的意义并不在于存储大数据,而在于 ...

  3. oracle dump 文件解析,Oracle 常用的dump(Memory Dumps/File Dumps/Trace 文件使用示例)

    一.Memory Dumps 1).Global Area ALTER SESSION SET EVENTS 'immediate trace name global_area level n'; 1 ...

  4. IO的端口映射和内存映射 (Port mapped I/O 和 Memory mapped I/O说明)

    IO端口和IO内存的区别及分别使用的函数接口  每个外设都是通过读写其寄存器来控制的.外设寄存器也称为I/O端口,通常包括:控制寄存器.状态寄存器和数据寄存器三大类.根据访问外设寄存器的不同方式,可以 ...

  5. Xilinx IP核AXI Memory Mapped to PCI Express使用

    作者 QQ群:852283276 微信:arm80x86 微信公众号:青儿创客基地 B站:主页 https://space.bilibili.com/208826118 性能 测试平台:长城的FT15 ...

  6. 简单深入两个虚拟内存API VirtualAlloc及VritualCopy

    VirtualAlloc : (配置虛擬記憶體) [MSDN] http://msdn.microsoft.com/en-us/library/aa366887(VS.85).aspx LPVOID ...

  7. Windows Mobile使用Shared Memory(共享内存)进行IPC(进程间通信)的开发

    背景 在Unix-like系统进行IPC(Inter-process communication)通信,Shared memory是效率最高的,我称之为IPC的王中王. 简介 本文讲述在Windows ...

  8. Persistent Memory编程简介

    Persistent Memory编程简介 编程 libpmem 持久化函数 libpmemobj 跟对象 root object 例程 事务支持 type safety 线程安全 管理工具 ipmc ...

  9. 《windows核心编程》–Windows内存体结构(一)

    13.1 进程虚拟地址空间 每个进程都有自己的专有地址空间,对32位进程来说,这个地址空间的大小为4GB,这是因为32位指针可以表示从0x00000000-0xffffffff的任意值.对64位进程来 ...

最新文章

  1. python报错 TypeError: string indices must be integers
  2. ITK:双边过滤图像
  3. 记录使用IDEA部署Tomcat时提示错误:the selected directory is not a TomEE home
  4. Git中上传忽略文件的方法 .gitignore
  5. 深度优先,广度优先,拓扑排序(实战题解)
  6. 【java】Java 8 - 移除Permgen 使用元空间
  7. Smali语法汇总(二)
  8. Windows 不能在 本地计算机 启动 SQL Server(MSSQLSERVER) 10048
  9. Spring @Cacheable设置过期时间
  10. 一款好用的取色工具TakeColor.exe
  11. Swift人工智能实战:从基础理论到AI驱动的应用程序开发
  12. 硕士研究生阶段如何学习slam机器人?
  13. JQuery 如何使用插件如何安装插件(详细讲解)
  14. iPhone免越狱Git服务器搭建教程-iSH
  15. 【飞轮储能】基于matlab simulink飞轮储能(永磁同步电机)仿真【含Matlab源码 2421期】
  16. 【码云学习02】Git基本命令
  17. 【转载】Visual Studio 2017各版本安装包离线下载、安装全解析
  18. oracle查询元数据,Oracle Spatial-元数据及SDO_GEOMETRY
  19. 心阶ssr上不去_高中数学成绩上不去的“九宗罪”!附经典数学题50道
  20. linux开发工具列表

热门文章

  1. c语言如何给阻塞函数加超时,在代码中写一个延时而不阻塞的函数方法,给大家的参考 - 单片机 - 电子工程世界-论坛 - 手机版...
  2. mysql 统计_mysql数据统计级别技巧
  3. 【星球知识卡片】换脸算法和人脸驱动都有哪些核心技术,如何对其长期深入学习...
  4. lazada开店流程图解,及平台类目佣金分享!
  5. 数组与指针的艺术--深入探索c/c++数组与指针的奥秘
  6. 全国农商互联暨精准扶贫产销对接 对话农民丰收节交易会
  7. 注重经营管理谋定市场开发-农业大健康·台湾:有机农业借鉴
  8. 【USACO06DEC】—牛奶模式Milk Patterns(后缀自动机)
  9. django 单元测试小结
  10. xtraback工具的使用和备份