| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5890 人关注过本帖, 3 人收藏
标题:我对 内存管理 的一丝见解
只看楼主 加入收藏
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
收藏
得分:0 
一杂志评的
笑笑就是了
认真你就输了。。。

[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2010-08-23 16:15
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:0 
回复 30楼 kingsroot
书上说用new申请一个数组会多出来一个字用来保存数组的大小。

迭代的是人,递归的是神。
2010-08-23 16:20
kingsroot
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:284
专家分:1159
注 册:2010-3-28
收藏
得分:0 
回复 33楼 lintaoyn
哦 明白了  看来还得多学习啊
2010-08-23 16:30
yxwsbobo
Rank: 5Rank: 5
等 级:职业侠客
帖 子:345
专家分:306
注 册:2007-10-29
收藏
得分:1 
汇编有个毛高度,它只是一种语言,精通汇编如同精通C/C++一样,能做的事情非常有限

内存中最常见的形式就是栈,各种局部变量临时变量都是存放在栈中的

另一个常见的形式是堆,全局变量静态变量等是存放在堆中的


堆和栈都是对虚拟内存管理的一种形式

文件镜像,资源,代码等都是直接存放在虚拟内存中的

How are you 怎么是你?
How old are you   怎么老是你?
2010-08-23 17:27
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 23楼 kingsroot
人工置顶一下, 不然沉了,就顶不上来了。

我就是真命天子,顺我者生,逆我者死!
2010-08-26 14:19
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
以下是引用kingsroot在2010-8-23 14:41:45的发言:

我只对Linux懂 对windows仅限于游戏使用,所以我还是用Linux来说
先看从语言角度来看内存管理:
 C语言中,提供了标准库函数malloc/free来申请内存和释放内存,在C++中提供了运算符new/delete来申请内存和释放内存,可以这样理解,后者是前者的泛化,用malloc申请内存,并不对内存进行实例化,就是简单的给你一块内存,至于在内存中存放什么类型的实体并不知道,但是C++中用new申请的内存,会把内存实例化,就是指明了内存存放的东西是什么类型。相信大家听过C中的malloc内存管理器吧,malloc内存管理器是管理可分配的虚拟内存的,专门支持malloc函数和free函数的功能,而C++程序中,既有malloc内存管理器,也有new(暂时取这个名字)内存管理器,后者专门支持new和delete运算符功能,这就是为什么如果用malloc申请的内存用delete释放,肯定是要出问题的
在来内存泄漏的问题:
我这里假设malloc管理器总共管理的虚拟内存有1M,你用malloc函数申请了512KB,在管理器内部,有2个表,一个用于记录空闲的内存大小,一个用于记录分配的内存大小,如果你调用了free,则管理器修改表,把释放的内存从第二个表中删除,并加入到第一个表中,有借有还,所以不会造成问题,但是你如果不调用free,那么第一个表的可用内存会越来越小,最终导致管理器的可以分配的内存不够,怎么办呢  留到操作系统内存管理在讨论,在new管理器中 原理和malloc管理器相似
操作系统的内存管理等会再说
您能不能从 汇编 或者是 操作系统 的高度写段代码 解决 内存碎片 问题。
要不然我觉得您这一段话 除了当作枯燥的教科书阅读一下,再没其他用处。

[ 本帖最后由 BlueGuy 于 2010-8-26 14:59 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2010-08-26 14:23
CImage
Rank: 1
等 级:新手上路
帖 子:18
专家分:6
注 册:2010-8-24
收藏
得分:0 
虽然没有达到内存管理真正理解的程度,不过还是涨了些知识,哈哈
2010-08-26 20:59
kingsroot
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:284
专家分:1159
注 册:2010-3-28
收藏
得分:0 
回复 36楼 BlueGuy
自己去看Linux源码  内存管理部分  看他是怎么处理伙伴关系的  然后又是怎么把分散内存合并成大块内存的 里面写得很清楚
2010-08-26 23:59
jiangkunhgnc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:76
专家分:185
注 册:2010-8-21
收藏
得分:0 
冒昧的问一句,什么是内存管理?
2010-08-27 02:30
xueyuhanhai
Rank: 4
等 级:业余侠客
帖 子:90
专家分:238
注 册:2010-4-5
收藏
得分:0 
楼主的几本书都是C语言里面很经典的书,谢谢楼主的无私分享。
2010-08-27 10:39
快速回复:我对 内存管理 的一丝见解
数据加载中...
 
   



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

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