
据我所知,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抛出方法来解决(建议这样处理)
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)