标题:求虚拟内存,文件映射,堆,普通变量之间的区别
只看楼主
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
结帖率:78.95%
已结贴  问题点数:100 回复次数:15 
求虚拟内存,文件映射,堆,普通变量之间的区别
分配虚拟内存用VirtualAlloc函数,文件映射用CreateFileMapping创建,堆用CreatHeap函数创建,普通变量用语言提供的类型创建,头晕了。。。
搜索更多相关主题的帖子: 内存 变量 文件 映射 虚拟 
2010-10-16 16:44
你们都要疼我哦
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:火星
等 级:贵宾
威 望:49
帖 子:1296
专家分:2746
注 册:2008-7-13
得分:20 
楼主终于发了个含金量比较高的百分帖了。

小妹,哥哥看你骨骼清奇,绝非凡人,将来必成大业,不如这样,你先把裤裤脱了,待哥哥为你开启灵窍,然后我们一起努力钻研如何
2010-10-16 18:37
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
得分:0 
以下是引用你们都要疼我哦在2010-10-16 18:37:55的发言:

楼主终于发了个含金量比较高的百分帖了。
你就疼下我吧,解说下,我刚了解了一半。。。

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-10-16 18:48
你们都要疼我哦
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:火星
等 级:贵宾
威 望:49
帖 子:1296
专家分:2746
注 册:2008-7-13
得分:0 
要透彻的完全理解这些还是需要花费很多时间的

文件映射可以拿出去单独跟文件操作一起去理解。
其他的是内存管理方面的知识点
函数所处的层次不同 知道用途就可以了。
想完全明白的话,枝枝蔓蔓的越扯越多,让人很苦恼。

小妹,哥哥看你骨骼清奇,绝非凡人,将来必成大业,不如这样,你先把裤裤脱了,待哥哥为你开启灵窍,然后我们一起努力钻研如何
2010-10-16 19:33
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
得分:0 
难怪会越看看头晕了。。。有什么好书好资料介绍下。

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-10-16 19:35
yxwsbobo
Rank: 5Rank: 5
等 级:职业侠客
帖 子:345
专家分:306
注 册:2007-10-29
得分:20 
VirtualAlloc是最基本的内存分配函数,用任何函数创建的内存,都是直接或间接的通过这个函数创建分配的

内存映射文件分配函数使用 MapViewOfFile ,严格的说,他并不是分配内存的函数,他是通过操作系统间接分配的,而且它和普通的内存有区别,一般的内存是把页交换文件作为物理存储器的,而这个函数是把磁盘上的文件作为物理存储器的


VirtualAlloc 每次至少分配4KB大小的内存,所以使用起来不方便,微软提供了一套自动分配和管理内存的机制就是 堆 ,堆调用VirtualAlloc分配一块大内存,之后你再通过堆使用一块块小内存,比如 new malloc 等


普通变量和参数的传递是使用栈的,所以函数递归足够多次,程序就会挂掉,因为栈用光了

How are you 怎么是你?
How old are you   怎么老是你?
2010-10-16 19:49
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
得分:0 
回复 6楼 yxwsbobo
不是这些答案。。。

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-10-16 19:58
WDMfans
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:168
注 册:2010-9-19
得分:20 
这3个函数就是malloc new的别名
之所以有这么多内存分配函数大概就是微软拿来害人的。
真要说区别的话,就是6楼的

内存映射文件函数创建共享内存,主要用于进程间通信。
或者当C中的fileopen大概是这个名字。


[ 本帖最后由 WDMfans 于 2010-10-16 21:24 编辑 ]
2010-10-16 21:21
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:20 
我想这些东西泡久了可能自己就清楚了。
我没有研究过 Windows 。不过我有一个同学在学,听他提起过一些,感觉非常复杂。楼上说微软有固弄玄虚的倾向,我觉得也有可能。
2010-10-16 21:42
yxwsbobo
Rank: 5Rank: 5
等 级:职业侠客
帖 子:345
专家分:306
注 册:2007-10-29
得分:0 
区别还是很大的


整个4GB内存空间 是由一个个提交的块 和 空闲的块和保留的块 相隔组成的

一个块中又可以有多个区段,每个段可以有不同的 可读,可写,可执行属性组合

只有VirtualAlloc才可以分配撤销这些块和区段

malloc new 只能利用段中的一部分内存而已

How are you 怎么是你?
How old are you   怎么老是你?
2010-10-16 22:42



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-323097-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.341621 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved