紧急求助:WinCE如何管理内存的?

紧急求助:WinCE如何管理内存的?,第1张

即然,所有程序共享的4GB虚拟地址空间,那么为什么还有一句“WinCE为所有的应用程序实现了单独的2GB的虚拟地址空间”

据我所知,win32下,通用寄存器是32位,1个程序可以采用32位地址线寻址。也就是2的32次方,就是4GB.这4GB是每个程序都独立私有的。因为8036采用了内存分页机制。系统占用2G左右的虚拟空间。剩下不到2G的空间给用户使用。WinCE 也是32位 *** 作系统都同样支持4GB的虚拟地址空间。

windows内存映射实现中,地址空间中的每个页面在任一时刻有3种情况:1,空闲的,2,保留的,3,已经提交物理内存的。这些页面由 *** 作系统交换进出内存。内存中某1个页面不再需要时, *** 作系统取消原来拥有该页面的应用程序对它的控制权,并且释放这个页面后供其他应用程序使用。使用内存映射文件,可以实现进程间共享数据。

========================================

汇编里:

CreateFile获得文件句柄。得到hFile.

GetFileSize.

CreateFileMapping创建1个内存映射文件对象,传入hFile,得到hFileMap

MapViewOfFile.得到指向映像到内存的第一个字节的指针lpMemory.

mov esi,@lpMemory

assume edi:ptr IMAGE_SECTION_HEADER 关联lpMemory指向节区。

//获取节区名称(.text/.data/.rsrc(资源段)等)

local @szSectionName[16]:byte

invoke RtlZeroMemory,addr @szSectionName,sizeof @szSectionName

push esi

push edi

mov ecx,8

mov esi,edi

lea edi,@szSectionName

cld

@@:

lodsb

.if ! al

mov al,' '

.endif

stosb

loop @B

pop edi

pop esi

//节区大小

[edi].Misc.VirtualSize

//虚拟地址

[edi].VirtualAddress

如你与leiyangbdwk中追问所示,你在WinCE中使用的是SqlCeDataReader,这个是SqlCE数据库的DataReader,如同你使用SQL Server时,使用的是SqlDataReader,而Access是OleDbDataReader,后面都是DataReader,而前面不同,这就代表着你使用了不同的连接文件而已。

SqlCe数据库是一个可以存放在智能设备上的一个文件型的数据库。如果你想访问存放于服务器上的SQL Server,有两种方式可以解决:

添加引用:System.Data.SqlClient

在一台对外的服务器上部署WebService,所有的数据库 *** 作都通过这个WebService抛出方法来解决(建议这样处理)


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7835708.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-10
下一篇2023-04-10

发表评论

登录后才能评论

评论列表(0条)

    保存