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. redis启动报错:The Windows version of Redis allocates a memory mapped heap for sharing with

    windows系统下通过cmd命令:redis-server.exe redis.windows.conf 启动redis报错,控制台报错如下: The Windows version of Redi ...

  2. C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转

    原文:C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing ...

  3. C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 VC中进程与进程之间共享内存 .net环境下跨进程、高频率读写数据 使用C#开发Android应用之WebApp 分布式事务之消息补偿解决方案

    C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing). ...

  4. 运行hadoop的时候提示物理内存或虚拟内存溢出的解决方案running beyond physical memory或者beyond vitual memory limits

    当运行中出现Container is running beyond physical memory这个问题出现主要是因为物理内存不足导致的,在执行mapreduce的时候,每个map和reduce都有 ...

  5. C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped

    节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing). 内存映射文件对于托管世界的开发人员来说似乎很陌生,但它确实已经是很远古的技术了,而且在操作 ...

  6. [转]内存分配malloc, new , heapalloc

    malloc,new,VirtualAlloc,HeapAlloc性能(速度)比较 http://www.cppblog.com/woaidongmao/archive/2011/08/12/1531 ...

  7. Anatomy of a Program in Memory

    Memory management is the heart of operating systems; it is crucial for both programming and system a ...

  8. [转]Anatomy of a Program in Memory

    Memory management is the heart of operating systems; it is crucial for both programming and system a ...

  9. redis报错Windows error 0x70(a large memory)

    redis报错Windows error 0x70 redis 嫌弃你内存不够了,就给你不开第二个实例. The Windows version of Redis allocates a large ...

随机推荐

  1. .net core 2.2 部署CentOS7(5)部署.net core mvc

    目录: .net core 2.2 部署CentOS7(1)安装虚拟机 .net core 2.2 部署CentOS7(2)给虚拟机安装CentOS7 .net core 2.2 部署CentOS7( ...

  2. Java基础教程(22)--异常

    一.什么是异常   异常就是发生在程序的执行期间,破坏程序指令的正常流程的事件.当方法中出现错误时,该方法会创建一个对象并将其交给运行时系统.该对象称为异常对象,它包含有关错误的信息,包括错误的类型和 ...

  3. Android Studio开发笔记

    工欲善其事,必先利其器. 来分享下一些tips吧. android studio优化 我的习惯是从visual studio沿袭过来的,所以快捷键都是参照VS改过来的. 设置调优 不打开上次打开的工程 ...

  4. 面试----java基础集合---------------------comparable和comparator 的区别

    comparable接口     是主要是用来自定义类存储在主要是TreeSet,TreeMap(键)集合中存储时,自定通过实现这种接口得到自然排序的功能. comparator 接口  是主要是用来 ...

  5. vue + element ui 表格自定义表头,提供线上demo

    前言:工作中用到 vue+element ui 的前端框架,需要使用自定义表头,需要使用 re.转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9710826.h ...

  6. php excel原理

  7. PHP IN_ARRAY 函数 使用需要注意的地方

    今天 看PPChttp://bbs.phpchina.com/thread-171993-1-7.html 这个问题. 其实关键还是因为 php是弱类型语言,php进行比较的时候 最好还是使用stri ...

  8. 换算rem的宽度和高度不生效 chrome字体最小为12px

    现在很多前端都用rem来单位元素和字体大小 一般的设置是 html{ font-size:62.5%; } 换算来源 1rem = 16px 10/16 = 0.625 这样10px 就等于了1rem ...

  9. javaSE——简单的文件浏览器

    import java.io.File; public class Demo02 { public static void main(String[]args){ File file = new Fi ...

  10. React Native常用组件样式总结

    在react 中,有时要使用 style 指定样式 ,如要跟随放大比例关系,展示图标. const stylebutton = {width:25*scalesize, height:25*scale ...