| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5890 人关注过本帖, 3 人收藏
标题:我对 内存管理 的一丝见解
只看楼主 加入收藏
你们都要疼我哦
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:火星
等 级:贵宾
威 望:49
帖 子:1296
专家分:2746
注 册:2008-7-13
收藏
得分:0 
以下是引用BlueGuy在2010-8-23 12:57:32的发言:

确实要站到汇编的高度 我还补充下,必须站在操作系统的高度去讨论,如果站在一个进程的角度去讨论 也是个表面
// 请你站到 操作系统的高度 谈谈内存管理
强烈期待kingsroot从操作系统的高度谈谈内存管理。用windows稍微多些,就从
windows讲吧。无限期待中。。。

小妹,哥哥看你骨骼清奇,绝非凡人,将来必成大业,不如这样,你先把裤裤脱了,待哥哥为你开启灵窍,然后我们一起努力钻研如何
2010-08-23 13:39
kingsroot
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:284
专家分:1159
注 册:2010-3-28
收藏
得分:0 
我只对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管理器相似
操作系统的内存管理等会再说
2010-08-23 14:41
szw982
Rank: 2
来 自:和谐社会
等 级:论坛游民
帖 子:80
专家分:34
注 册:2010-8-18
收藏
得分:1 
恩,《c primer plus》这本书很好看,我买了2本,都送朋友了!

请给我结果 我要改变任人摆布的人生!
2010-08-23 14:50
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
作者的前言没有乱说吧

我就是真命天子,顺我者生,逆我者死!
2010-08-23 15:06
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
收藏
得分:0 
以下是引用BlueGuy在2010-8-23 13:17:33的发言:

那个 hackerjiang学习汇编还不到一个星期, 还没有哥学的时间长,他放的屁你也顶?
被你这么一说好奇地看了看他的回帖
发现其汇编满打满算也就学了一个月
果然越是这种半吊子货色越爱出来晃荡
开始还猜想此人有那么点儿料,只不过对汇编的认识没那么深刻才有那么幼稚偏激的言语
现在一看原来就是个学了没多长时间汇编就出来拿汇编装B的主
鄙人最烦装B的人
不过真没时间搭理他们
只好拜托你来专治各种装逼犯了。。。

[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2010-08-23 15:27
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
谁能从OO上讲内存的使用呢?

比如 int *buf =new int[10];

for ( int i =0 ; i < 10 ; i++ )
{
    int *buf =new int;
}

这两个都是分配10个int,在内存里面正真的大小是一样大吗?

还有对基类对象和派生类对象的内存分布是怎么样子的。 你们谁能讲瞎子?

[ 本帖最后由 Devil_W 于 2010-8-23 15:32 编辑 ]
2010-08-23 15:30
szw982
Rank: 2
来 自:和谐社会
等 级:论坛游民
帖 子:80
专家分:34
注 册:2010-8-18
收藏
得分:0 
回复 25楼 BlueGuy
图片附件: 游客没有浏览图片的权限,请 登录注册

光封面我就喜欢《C Primer Plus》
图片附件: 游客没有浏览图片的权限,请 登录注册

1984年我想我还没投胎呢,看了里面的文章写的循序渐进,通俗易懂,写的很详细,简单的对比下两书的封面:
图片附件: 游客没有浏览图片的权限,请 登录注册

书本封面醒目的写着发行逾1100万册,其实清华大学出版社不必这么高调
几个学C的人不知道老谭的,我觉得商业性更强烈点!!

请给我结果 我要改变任人摆布的人生!
2010-08-23 15:35
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 15:36
kingsroot
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:284
专家分:1159
注 册:2010-3-28
收藏
得分:0 
不相同吧  每个new分配的内存,不仅包括类成员的大小,还包括一个指向虚拟表的指针  你第二个问题 没看明白
2010-08-23 15:50
szw982
Rank: 2
来 自:和谐社会
等 级:论坛游民
帖 子:80
专家分:34
注 册:2010-8-18
收藏
得分:0 
回复 29楼 succubus
想想看       2000年被《计算机世界》报组织的“世纪评选”评为我国“20世纪最有影响的10个IT人物”之一   乱牛逼的人物   我百度了下他里面有个很牛逼的句子 “教授计算技术的大师、普及现代科技之巨擘”
 感觉他出书就跟做兼职一样,更多给我的感觉就是大忙人,今天这里开个学术研讨会,明天那边开个讲座,年底去哪边领个奖!

请给我结果 我要改变任人摆布的人生!
2010-08-23 16:09
快速回复:我对 内存管理 的一丝见解
数据加载中...
 
   



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

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