社区
Delphi
帖子详情
初学delphi,学习这个调用虚拟内存的函数virtualalloc(),搞了我3个小时都没有搞出来?请大家进来看看,谢谢!
SailorK
2003-12-07 09:27:41
题目如下:编写一个程序,使用vitualalloc在虚存中建立一个矩阵,在输入数据时根据需要动态提交物理内存,程序结束后释放所用的虚存块。
我已经把题目搞清了,但是是初学,很多东西还把握不好,希望前辈帮忙看看,写写,谢谢!!!我真的很想把它搞好,谢了!!分不够再加
...全文
221
6
打赏
收藏
初学delphi,学习这个调用虚拟内存的函数virtualalloc(),搞了我3个小时都没有搞出来?请大家进来看看,谢谢!
题目如下:编写一个程序,使用vitualalloc在虚存中建立一个矩阵,在输入数据时根据需要动态提交物理内存,程序结束后释放所用的虚存块。 我已经把题目搞清了,但是是初学,很多东西还把握不好,希望前辈帮忙看看,写写,谢谢!!!我真的很想把它搞好,谢了!!分不够再加
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
SailorK
2003-12-10
打赏
举报
回复
有点看不懂诶
hongqi162
2003-12-08
打赏
举报
回复
在Delphi中该函数VirtualAlloc用来保留虚拟页。实现在调用线程的虚地址空间中保留或提交一个页区域。
如果你不使用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;
qgj99
2003-12-08
打赏
举报
回复
顶
SailorK
2003-12-08
打赏
举报
回复
大家帮忙解决一下,其实不难,只是我对delphi中的变量不是很熟
wjpop3
2003-12-08
打赏
举报
回复
学习!!!!!!
我顶
我顶
我顶
我顶
我顶
我顶
SailorK
2003-12-07
打赏
举报
回复
在线等待,谢谢
C++第3课:C++内存泄露检测原理及案例实战
本课程具体的内容主要包括C++内存泄露案例、VS2015内存泄露检测、野指针、
Virtu
a
lAlloc
/HeapAlloc/malloc/new的区别、C++堆和栈的内存管理、栈简介、堆简介、堆与栈区别、栈的内存分配、Windows的
虚拟内存
技术、...
Delphi
调用
Dll
一. DLL和系统变量 在 System 单元声明的变量中,有几个对DLL编程有特殊影响。IsLibrary 可以检测代码是执行在应用程序中还是执行在DLL中,在应用程序中 IsLibrary 总是为 False ,在 DLL中总是为 True 。在 DLL的整个生命周期中,HInstance 包含了库的实例句柄。在DLL中,系统变量 CmdLine 总是为 nil 。 D
Delphi
下DLL编程知识
DLL是编写Windows应用程序的关键组成部分。介绍了动态链接库(DynamicallyLoadable Library,DLL)的基本概念
Delphi
的对象机制浅探
Delphi
的对象机制浅探
Delphi
的对象机制浅探savetime2k@yahoo.com2004-1-3前几天开始阅读 VCL 源代码,可是几个基类的继承代码把我看得头大。在大富翁
请
教了几位仁兄后,我还是对
Delphi
对象的创建和方法
调用
原理不太清楚。最后只好临时啃了一下汇编,把
Delphi
对象操作的几个关键的方法勘察了一遍。你可以通过以下链接知道我为什么要做这件事:http://w
Delphi
的对象机制浅探[转载]
Delphi
的对象机制浅探
savetime2k@yahoo.com
2004-1-3
前几天开始阅读 VCL 源代码,可是几个基类的继承代码把我看得头大。在大富翁
请
教了几位仁兄后,我还是对
Delphi
对象的创建和方法
调用
原理不太清楚。最后只好临时啃了一下汇编,把
Delphi
对象操作的几个关键的方法勘察了一遍。
你可以通过以下链接知道我为什么要做这件事:
http://www.
delphi
bbs.com/
delphi
bbs
Delphi
5,388
社区成员
262,730
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章