请教一个linux 内存管理理中的问题

博客访问: 158806
博文数量: 65
博客积分: 2730
博客等级: 少校
技术积分: 690
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: LINUX
进程在内存中大致分为代码段,静态/全局数据段,堆和栈 我想问的是一个关于栈的问题 看数据结构中,出栈的函数有两种:顺序的和链式的 1,顺序方式出栈后,原栈顶元素不变 ElemType Pop(StackType& S) &&&&&&&&&&&&&&&//&删除栈顶元素并返回之 &&&&&&&{ &&&&&&//&若栈为空则终止程序运行 &&&&&&&&if(S.top==-1)&{ &&&&&&&&&printf("Stack&is&empty!\n"); &&&&&&&&&exit(1); &&&&&&&&} &&&&&&&&&//&暂存栈顶元素以便返回 &&&&&&&&&&&ElemType?&temp=S.stackS.top; &&&&&&&&&//&栈顶指针前移一个位置 &&&&&&&&S.top--; &&&&&&&&&//&返回原栈顶元素的值 &&&&&&&&return& &&&} &&&从出栈算法可以看出,原栈顶元素的值没有被改变,所以可以不使用临时变量保存它,返回语句中返 回S.stack的值即可。 2,链式的方式则需要将栈顶元素回收 &&&&&&&ElemType?&Pop(LNode*&&HS) &&&&&&&{ &&&&&&&&if(HS==NULL)&{ &&&&&&&&&pringtf("Linked&stack&is&empty!\n"); &&&&&&&&&exit(1); &&&&&&&&} &&&&&&&&LNode*&p=HS;&&//&暂存栈顶结点 &&&&&&&&HS=HS->&&//&使栈顶指针指向其后继结点 &&&&&&&&ElemType?&temp=p->&&//&暂存原栈顶元素 &&&&&&&&&&&delete&p;&&//&回收原栈顶结点 &&&&&&&&return&&&//&返回原栈顶元素 &&&&&&&}& 不知道在内存中使用的是上述哪种方式,也是说想知道“在函数执行完毕后,原来栈的内容是被清空了,还是只是esp的位置发生了变化而内容保持函数执行时的数据” 谢谢。
Re: 问一个关于内存管理的问题
你提到的是数据结构的“栈”的两种实现方式,与体系结构的栈讨论的层次不同(体系结构中栈属于前一种;对你的问题的回答是,不清零,只移动指针)。 后一种,“链表”方式主要用在纯软件中,主要用于小系统或小模块的“内存管理”。 例如:网络协议栈中,有128个2K大小的缓冲块。每个MAC包来后,固定分配2K大小的一个缓冲,用完释放。 问:怎样设计缓冲管理/分配模块?(是数组方式,还是bitmap方式---实际上也是数组方式的变种,还是栈链表?) 答:首先,分析一下 (1)管理模块(或allocator)需要提供哪些接口或服务?(分配、回收) (2)分配方式:定长还是变长? (3)性能:该方案查找一个空闲(free)模块,以及回收(即重新挂接freelist)开销是多少? 答案:如果是固定分配大小,O(1)的分配和回收开销,则答案一定是“栈”式的freelist数据结构。 附1:也有采用固定关联的链表方式,如tree,即一个block无论是被分配或free,它的next或prev都是固定的),则操作链表的开销(尤其是空间上的)都比栈结构要大。 附2:栈结构之关键概念是freelist: 全局变量总是指向栈顶。初始化的时候,所有的block连在一个freelist上。 (1)初始化: freelist = (B0) --> B0 = (B1) --> B1 = (B2) --> ...... --> Bn-1 = (Bn) --> Bn = (Bn) 注意其栈底:Bn = (Bn) 一个地址中的内容就是地址本身,则表示到底了; (2)分配: freelist = freelist = B1, 即意味着B0被分配了,现在的栈顶是指向B1 (3)回收Bk: 假设当前freelist指向Bm, 则Bk = (freelsit) = (Bm), freelist = Bk; 总之,这种结构,分配与回收的顺序不同,无所谓!管理上的空间开销也很小(32位即可 b31...b2 = block之4字节对齐地址,b1b0可做扩展管理用,如链表lock等)。
阅读(447) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。后使用快捷导航没有帐号?
查看: 6264|回复: 16
请教关于PHP内存占用管理的问题
象宝宝-小象, 积分 3343, 距离下一级还需 -3243 积分
假定PHP设置默认内存占用为128M,请问这个128M是指当前用户请求最大128M,还是指所有用户访问PHP总和为128M?我有段代码是让PHP读取一个1M的文件数据到PHP中提供用户下载,那么同时请求128次以上那么是不是就会报告内存错误了?memory_get_usage()这个函数可以检查内存占用,但是这个函数好像检查的是当前用户请求所占用的内存,而不是所有用户共同请求占用的内存吧?
1.PHP运行时的内存不仅仅是PHP语言中的ZEND管理的,服务器软件如apache也要参与管理。
2.内存不是这么简单加和的,100个1相加不等于100.
2.memory_get_usage()检查的既非当前用户也非所有用户,而是当前脚本。这个由服务管理软件决定。
PHPChina社区 PHP开发者社区
1.PHP运行时的内存不仅仅是PHP语言中的ZEND管理的,服务器软件如apache也要参与管理。
2.内存不是这么简单加和的,100个1相加不等于100.
2.memory_get_usage()检查的既非当前用户也非所有用户,而是当前脚本。这个由服务管理软件决定。
PHPChina社区 PHP开发者社区
象守卫-象, 积分 137, 距离下一级还需 63 积分
本帖最后由 czc9180 于
10:15 编辑
1. 应该是用户访问的总内存!
2. 上传的文件是驻存在内存中的,而后转成文件,你可以采用ajax上传文件就没事了
3. 内存的总量
PHPChina社区 PHP开发者社区
象宝宝-小象, 积分 3343, 距离下一级还需 -3243 积分
应该是用户访问的总内存!
czc9180 发表于
还有两个问题:
& & 我有段代码是让PHP读取一个1M的文件数据到PHP中提供用户下载,那么同时请求128次以上那么是不是就会报告内存错误了?
& &(希望能够提高同时请求次数,如何做)
memory_get_usage()这个函数可以检查内存占用,但是这个函数好像检查的是当前用户请求所占用的内存,而不是所有用户共同请求占用的内存吧?
& &(如果memory_get_usage()检查的是当前内存,那么如何管理PHP占用内存的总和?)
PHPChina社区 PHP开发者社区
象宝宝-小象, 积分 3343, 距离下一级还需 -3243 积分
1.PHP运行时的内存不仅仅是PHP语言中的ZEND管理的,服务器软件如apache也要参与管理。
2.内存不是这么简单 ...
iminto 发表于
& & 你说的这句提醒了我“内存不是这么简单加和的,100个1相加不等于100.”,请问你有没有PHP内存相关的资料提供阅读,谢谢。
PHPChina社区 PHP开发者社区
象宝宝-小象, 积分 3343, 距离下一级还需 -3243 积分
1.PHP运行时的内存不仅仅是PHP语言中的ZEND管理的,服务器软件如apache也要参与管理。
2.内存不是这么简单 ...
iminto 发表于
& && &&&你说的这句提醒了我“内存不是这么简单加和的,100个1相加不等于100.”,请问你有没有PHP内存相关的资料提供阅读,谢谢。
PHPChina社区 PHP开发者社区
本帖最后由 iminto 于
10:27 编辑
还有两个问题:
& & 我有段代码是让PHP读取一个1M的文件数据到PHP中提供用户下载,那么同时请求128次以上 ...
李惟 发表于
如何管理PHP占用内存的总和?无法管理。PHP语言本身不对外提供内存管理。
你仅能使用null,gc等完成一些边缘性的操作
PHPChina社区 PHP开发者社区
好高骛远了,那还不是你该问的问题。内存管理需要你精通C语言,汇编等。
PHPChina社区 PHP开发者社区
象巨人-千象, 积分 3353, 距离下一级还需 147 积分
1. 应该是用户访问的总内存!
2. 上传的文件是驻存在内存中的,而后转成文件,你可以采用ajax上传文件就没事了 ...
czc9180 发表于
第二条,你这算什么理论?上传文件是存放在临时路径而已,还有AJAX根本不能上传文件,如果用异步,只能用隐藏的iframe,和普通页面上传又有什么区别,只不过输出内容不一样而已
PHPChina社区 PHP开发者社区
象宝宝-小象, 积分 3343, 距离下一级还需 -3243 积分
本帖最后由 李惟 于
14:40 编辑
楼上偏题了,曲解我的意思了,我的意思不是用PHP来管理内存、或者操作什么。
1.我只想找到关于“内存不是这么简单加和的,100个1相加不等于100”这类的资料,既然不是加和,那么肯定有他的原理在里面对不对,我想知道的就是这个原理。
2.我想了解类似这样的情况
PHP读取一个1M的文件数据到PHP中提供用户下载,他能支持多少用户同时执行这个PHP,这样去优化?
也不是上面说的“上传文件”
PHPChina社区 PHP开发者社区
PHP是不是就是同有些人说的真的执行一个请求后就释放了所有内存呢?不是的,就阿帕奇而言,我们知道它在启动后会加载PHP模块,然后会进行多次内存接管,有些变量会被保留下来,还有野指针等,操作系统也会对内存进行整理。这个过程,没有深厚的C语言和操作系统基础,是理解不了的。这里也只是我自己的一些认识。
PHPChina社区 PHP开发者社区
象宝宝-小象, 积分 3343, 距离下一级还需 -3243 积分
PHP是不是就是同有些人说的真的执行一个请求后就释放了所有内存呢?不是的,就阿帕奇而言,我们知道它在启 ...
iminto 发表于
& & 谢谢,请教你最后一个问题
PHP读取一个1M的文件数据到PHP中提供用户下载: 他能支持多少用户同时执行这个PHP,(可以假定一个环境作为标准描述一个大概的数量)有没有优化方法?(如果一言难尽,那就个几个提示信息,我自己搜索也OK)
PHPChina社区 PHP开发者社区
内存怎么变,怎么分配,非一流高手无法回答。一般只能给一个经验值。这个我也没这方面的经验,你可以咨询下对ZEND和服务器很精通的高人。
PHPChina社区 PHP开发者社区
象守卫-象, 积分 172, 距离下一级还需 28 积分
个人感觉你那个下载的问题,可以把文件读到内存里来。然后让客户访问webserver的时候,直接去内存取。
类似于mc吧。像 ku6&&土豆 都是把热点视频放到内存里的。
PHPChina社区 PHP开发者社区
象宝宝-小象, 积分 3343, 距离下一级还需 -3243 积分
个人感觉你那个下载的问题,可以把文件读到内存里来。然后让客户访问webserver的时候,直接去内存取。
reallovelei 发表于
& & 文件读到内存,你是指file_get_content吗?这样读取出来的数据好像依旧是PHP占用的内存吧。
PHPChina社区 PHP开发者社区
象宝宝-小象, 积分 3343, 距离下一级还需 -3243 积分
这几天搜索了些相关资料,找到一些关于问题的答案:
1.PHP中的默认内存是当前脚本的内存,只负责当前脚本,和我上面说的用户无关。
2.适当释放、适当获取数据
3.及时抓取出现问题所在(了解内存会在什么情况下异常),之前我询问的方法可以是个不错的选择
4.了解问题,对应解决方法(修改代码,或者调整默认值,增加服务器的硬件)
5.对于我上面的问题抓取数据提供给用户下载,下面这里有个不错的方法:
PHPChina社区 PHP开发者社区
象骑士-大象, 积分 315, 距离下一级还需 185 积分
PHPChina社区 PHP开发者社区
工作时间:周一至周五(08:30~18:00)
官方微信二维码> 请教关于Linux内存管理机制以及MMU的几个问题~(一)有这样的说法:C#codeMMU负责将程
请教关于Linux内存管理机制以及MMU的几个问题~(一)有这样的说法:C#codeMMU负责将程
terry137 & &
发布时间: & &
浏览:8 & &
回复:1 & &
悬赏:0.0希赛币
请教关于Linux内存管理机制以及MMU的几个问题~(一)有这样的说法:  C# code  MMU负责将程序中的虚拟地址(VA)转换为物理地址(PA)
  C# code  线性地址是逻辑地址到物理地址变换之间的中间层,如果启用了分页机制,那么线性地址会使用页目录和页表中的项变换成物理地址。如果没有启用分页机制,那么线性地址就直接成为物理地址了[\quote]
问:说法一中的虚拟地址是否就是说法二中的逻辑地址?是的话逻辑地址转换为物理地址的过程是否就由MMU完全负责,还有说法二中的分页机制开不开启是如何实现的? &
& (二)  C# code  虚拟内存机制被比喻为:你不需要非常长的轨道让一列火车从上海开到北京。你只需要足够长的铁轨(比如说3公里)就能完成这个任务。采取的方法是把后面的铁轨即时铺到火车的前面
问:这部分工作是由谁实现的?系统是如何做到为每个进程虚拟出4G的空间而又保证进程之间在内存中相互独立互不干扰的? &
& (三)我的理解(说法可能有不恰当):cpu的分段机制对应了逻辑地址(虚拟地址?)--&线性地址、分页机制对应了线性地址--&物理地址,这样繁冗的做法是由什么问题所制约的?问的没什么条理,先谢各位了~~
你可以去翻下《Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3System Programming Guide》在 Chapter 3 Protected-Mode Memory Management,图 Figure 3.1 Segmentation and Paging 有非常详细的解释。我写的解释肯定不如那里介绍的好,就不写了terry21 & &
15:54:59 & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&只需一步,快速开始
雷得丝俺的杰特闷:好网论坛启用更快更稳定的新网址&&&&旧版
停止注册发帖,可以浏览和登录搜索查询旧帖。
给大家带来的不便深表歉意~(*^__^*)~
查看: 2131|回复: 12
推广度0 金币0 水吧豆0 惊喜券19 性别男在线时间39 小时最后登录帖子好友精华0积分273注册时间UID353131
八品县丞, 积分 273, 距离下一级还需 67 积分
该用户从未签到性别男惊喜券19 水吧豆0 金币0 帖子
推广度0 金币0 水吧豆0 惊喜券84 性别男在线时间32 小时最后登录帖子好友精华0积分72注册时间UID334205
举人, 积分 72, 距离下一级还需 8 积分
该用户从未签到性别男惊喜券84 水吧豆0 金币0 帖子
这些东西写多了就差不多懂了.&&高质量程序设计&&c/c++ 书名记不大清了.上边的问题,写个代码,goto disassembly就看出了.
推广度0 金币257 水吧豆59 惊喜券5106 性别男在线时间240 小时最后登录帖子好友精华0积分3864注册时间UID41607
早起的虫儿有鸟吃
三品参将, 积分 3864, 距离下一级还需 156 积分
该用户从未签到性别男惊喜券5106 水吧豆59 金币257 帖子
楼主所谓的"内存管理"是操作系统层面的吧,也就是堆、栈这一层次的。搜搜看吧,这方面的资料多成马了… 结合汇编会更好理解,多调调就清楚了… 这方面的直接看内核源码吧,linux太大,你可以试试一些较小的嵌入式specific的内核,或是一些bootloader…另一个是应用层的内存管理,也就是常说的内存复用、内存池之类的… lighttpd, nginx,haproxy等一些开源软件,内存管理方面是经得起考验的… 继续深入的到cu c/c++板块灌水去吧,那里的要人比较多 
推广度0 金币0 水吧豆0 惊喜券19 性别男在线时间39 小时最后登录帖子好友精华0积分273注册时间UID353131
八品县丞, 积分 273, 距离下一级还需 67 积分
该用户从未签到性别男惊喜券19 水吧豆0 金币0 帖子
推广度0 金币0 水吧豆0 惊喜券84 性别男在线时间32 小时最后登录帖子好友精华0积分72注册时间UID334205
举人, 积分 72, 距离下一级还需 8 积分
该用户从未签到性别男惊喜券84 水吧豆0 金币0 帖子
看到LS的LS,我只能以为是xd老师...上来就只会大堆乱七八糟的概念
推广度0 金币257 水吧豆59 惊喜券5106 性别男在线时间240 小时最后登录帖子好友精华0积分3864注册时间UID41607
早起的虫儿有鸟吃
三品参将, 积分 3864, 距离下一级还需 156 积分
该用户从未签到性别男惊喜券5106 水吧豆59 金币257 帖子
14:11:01 在大作中提到看到LS的LS,我只能以为是xd老师...上来就只会大堆乱七八糟的概念可以叫哥哥,但绝不是老师…这方面的资料网上不是可以随便搜到的么,你觉得有必要再贴一大堆么… 只要关键字对上了,大部分资料还是可以找到的…“只会大堆乱七八糟的概念”, 也不全对的啊,很多时候我也还会搞混的… 再给lz推荐一本书,《python源码分析》里边有一章专门介绍python的内存管理,可以参考参考 … 图书馆8楼,隐约在第30书柜右上角方位,著者:陈儒…附: google 堆 栈 变量/search?hl=zh-CN&source=hp&q=%E5%A0%86+%E6%A0%88+%E5%8F%98%E9%87%8F&btnG=Google+%E6%90%9C%E7%B4%A2&aq=f&oq=
推广度0 金币0 水吧豆0 惊喜券84 性别男在线时间32 小时最后登录帖子好友精华0积分72注册时间UID334205
举人, 积分 72, 距离下一级还需 8 积分
该用户从未签到性别男惊喜券84 水吧豆0 金币0 帖子
cu是chinaunix?还是?
推广度0 金币24 水吧豆0 惊喜券332 性别男在线时间76 小时最后登录帖子好友精华1积分1635注册时间UID157359
四品知府, 积分 1635, 距离下一级还需 845 积分
该用户从未签到性别男惊喜券332 水吧豆0 金币24 帖子
呵呵,这年头肯研究C++的不多了,都在弄Java&&& .NET什么的。《C、C++深层探索》,绝对能让你看爽。}

我要回帖

更多关于 android 内存管理 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信