代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Python
】
内存管理
作者:
王洪旭
/ 发布于
2014/7/7
/
887
编写程序模拟完成动态分区存储管理方式的内存分配和回收。
#!/usr/bin/python #-*- coding: utf-8 -*- class Table(object): #空闲分区表 #0:开始地址 1:长度 freeTable = [] #占用分区表 #0:程序名 1:开始地址 2:长度 useTable = [] def __init__(self): print '初始化内存使用情况' self.useTable.append(['os',0,10]) self.freeTable.append([10,100]) def WorkAdd(self): memoryName = raw_input('请输入进程名:') memoryName = memoryName.strip() memorySize = int(raw_input('请输入进程大小:')) if (memoryName != '' and memorySize > 0): self._WorkAdd(memoryName, memorySize) else: print '输入有问题' def _WorkAdd(self, memoryName, memorySize): minIndex = -1 minMemory = 0 for i in xrange(len(self.freeTable)): if (self.freeTable[i][1] > memorySize): if (minIndex == -1): minMemory = self.freeTable[i][1] minIndex = i else: if (self.freeTable[i][1] < minMemory): minMemory = self.freeTable[i][1] minIndex = i if (minIndex == -1): self.outOfMemory() else: start = self.freeTable[minIndex][0] length = self.freeTable[minIndex][1] self.freeTable.remove(self.freeTable[minIndex]) self.useTable.append([memoryName,start,memorySize]) self.freeTable.append([start + memorySize,length - memorySize]) self.display() def display(self): print '已用分区表\n程序进程名\t开始地址\t长度' for i in xrange(len(self.useTable)): print self.useTable[i][0], '\t\t', self.useTable[i][1], '\t', self.useTable[i][2] print '空闲分区表\n开始地址\t长度' for i in xrange(len(self.freeTable)): print self.freeTable[i][0], '\t\t', self.freeTable[i][1] def outOfMemory(self): print '亲,内存不够了' self.display() def WorkDel(self): memoryName = raw_input('请输入进程名:') memoryName = memoryName.strip() if (memoryName == ''): print '没有输入' else: self._WorkDel(memoryName) def _WorkDel(self,memoryName): index = -1; for i in xrange(len(self.useTable)): if (self.useTable[i][0] == memoryName): index = i break if (index == -1): print '不存在此进程' else: start = self.useTable[index][1] length = self.useTable[index][2] end = start + length freeIndex1 = -1 freeIndex2 = -1 for i in xrange(len(self.freeTable)): iStart = self.freeTable[i][0] iLength = self.freeTable[i][1] if (start == iStart + iLength): freeIndex1 = i break for i in xrange(len(self.freeTable)): if (self.freeTable[i][0] == end): freeIndex2 = i break if (freeIndex1 != -1 and freeIndex2 != -1): iStart = self.freeTable[freeIndex1][0] iLength = self.freeTable[freeIndex1][1] + self.freeTable[freeIndex2][1] + length self.freeTable.append([iStart,iLength]) self.freeTable.remove(self.freeTable[freeIndex1]) self.freeTable.remove(self.freeTable[freeIndex2]) elif (freeIndex1 != -1 and freeIndex2 == -1): iStart = self.freeTable[freeIndex1][0] iLength = self.freeTable[freeIndex1][1] + length self.freeTable.append([iStart,iLength]) self.freeTable.remove(self.freeTable[freeIndex1]) elif (freeIndex1 == -1 and freeIndex2 != -1): iStart = start iLength = self.freeTable[freeIndex2][1] + length self.freeTable.append([iStart,iLength]) self.freeTable.remove(self.freeTable[freeIndex2]) elif (freeIndex1 == -1 and freeIndex2 == -1): iStart = start iLength = length self.freeTable.append([iStart,iLength]) else: print '系统崩溃' self.display() def run(self): while(True): print '动态分区存储管理' print '1,增加程序' print '2,结束程序' print '3,退出' print '请选择操作:(输入数字)' chose = raw_input('请选择操作:') chose = chose.strip() if (chose == '1'): self.WorkAdd() elif(chose == '2'): self.WorkDel() elif (chose == '3'): break else: print '输入有误' print '\n' if __name__ == '__main__': table = Table() table.run()
试试其它关键字
内存管理
内存
动态分区
同语言下
.
比较两个图片的相似度
.
过urllib2获取带有中文参数的url内容
.
不下载获取远程图片的宽度和高度及文件大小
.
通过qrcode库生成二维码
.
通过httplib发送GET和POST请求
.
Django下解决小文件下载
.
遍历windows的所有窗口并输出窗口标题
.
根据窗口标题调用窗口
.
python 抓取搜狗指定公众号
.
pandas读取指定列
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
王洪旭
贡献的其它代码
(
2
)
.
cpu调度
.
内存管理
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3