题目如下:编写一个程序,使用vitualalloc在虚存中建立一个矩阵,在输入数据时根据需要动态提交物理内存,程序结束后释放所用的虚存块。
我已经把题目搞清了,但是是初学,很多东西还把握不好,希望前辈帮忙看看,写写,谢谢!!!我真的很想把它搞好,谢了!!分不够再加
我已经把题目搞清了,但是是初学,很多东西还把握不好,希望前辈帮忙看看,写写,谢谢!!!我真的很想把它搞好,谢了!!分不够再加
解决方案 »
- dephi 如何判断软件是否关闭
- 使用Delphi控制条码打印机打印条码(系列问题1)
- 晕倒的问题,DLL中过程与ADO的问题(天气太热,容易中暑,路过的给口水喝吧)
- TShockwaveFlash控件问题?
- 与数据库相关的软件发布时需要带什么部件(*.dll等)
- 希望大家帮帮忙:insertdata parameter ':fanghao_p' not found 什么意思
- 如何在delphi高速导出oracle数据库中的数据,把数据保存成txt文件?
- 如何制作可自动生成label并可拖动程序
- Rmb求小批量发送email方案!
- 报表,怎么做自己浏览窗口?
- 我将在下周推出免费邮件群发&群收系统.
- 奇怪的问题,关于子窗体,大家帮我看看
如果你不使用VirtualLock就不会把过程地址空间中的指定区域封锁在内存中。被保存的内存其它应用程序
无法使用并不是绝对的,利用VirtualFree就可以释放或收回该空间。你可以通过指针读取修改其中的内容。
//使用VirtualAlloc可以保存一定的内存,但是这和分配又有什么本质的区别呢?
没有区别,起码我是这么认为,虚存的分配本就是通过VirtualAlloc函数来完成。一段虚拟内存在申请后并
不能马上使用,如果要使用必须先提交,并且在提交时指定内存的保护方式。
//实际分配的过程则会慢一些
至于速度问题确实存在,进行分配操作往往会造成速度的减慢,例如没有空闲块。或者频繁的分配和重分配
都会造成速度减慢。但最关键在于竞争问题,如当两个或多个线程同时访问数据,而且在一个线程继续进行之
前必须等待另一个线程完成时就发生竞争。当大量使用内存块或DLL以多线程方式运行时将导致速度减慢。
竞争是在分配和释放操作中产生导致速度减慢的问题,在多任务中很难十全十美的解决!Delphi中例子:
const
BlockCode: array [1..2] of Byte = ($59, $E9);
PageSize = 4096;
var
Block: PInstanceBlock;
Instance: PObjectInstance;
begin
if InstFreeList = nil then
begin
Block := VirtualAlloc (nil, PageSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
Block^.Next := InstBlockList;
Move(BlockCode, Block^.Code, SizeOf(BlockCode));
Block^.WndProcPtr := Pointer(CalcJmpOffset(@Block^.Code[2], @StdHookProc));
Instance := @Block^.Instances;
repeat
Instance^.Code := $E8;
Instance^.Offset := CalcJmpOffset(Instance, @Block^.Code);
Instance^.Next := InstFreeList;
InstFreeList := Instance;
Inc(Longint(Instance), SizeOf(TObjectInstance));
until Longint(Instance) - Longint(Block) >= SizeOf(TInstanceBlock);
InstBlockList := Block
end;
Result := InstFreeList;
Instance := InstFreeList;
InstFreeList := Instance^.Next;
Instance^.Method := Method
end;