Board logo

标题: ems存存储一个600*400的二维数组 [打印本页]

作者: jiaxu520     时间: 2006-7-11 12:07    标题: ems存存储一个600*400的二维数组
因为我需要一个600*400的二维数组存放浮点型数据,所以在一般DOS下不能申请这么大的二维数组,便想到用EMS申请的内存页面作为二维数组的行,一行中的数据都放在一页中,那么申请的总页数就是400页. 不知哪位高手指点,该如何做?

给出我的程序
unsigned hzhandle;//main函数中要用到释放内存页面时用到全局变量ZHANDLE
double far *fardouble;
double far *tmp,buffer[600];//4k==512*8
unsigned nowpagenum,pageaddr;//当前EMS页面数和得到的页地址

char Load_EMS(void)
{

int e,hzk,page,i,j;
double flag;
unsigned max_block,total;
unsigned totalpage;
// hzk=open(....);///////////
if(test_ems()){
if(!get_EMS_status()){
flag=get_number_of_pages(&nowpagenum,&totalpage);
page=500;
if(nowpagenum>page){
flag=get_page_frame_segment(&pageaddr); }

if((!flag)&&(!allocate_memory(&hzhandle,page))){

fardouble=(double far *)MK_FP(pageaddr,0);
tmp=fardouble;nowpagenum=0;

/* for(e=400;e!=0;e--){
if(tmp==fardouble+16384){
map_memory(0,nowpagenum,hzhandle);
nowpagenum++;tmp=fardouble;

}
}
*/

return 0; }}
}
return 1;
}



我在具体存储数据时发现总是存不进去

作者: firstsail     时间: 2006-7-11 18:59
可以使用WinSail V2.0的CXmsMemory扩展内存类,
其中可以用到:
BOOL CXmsMemory:MallocXms(DWORD dwSize);//分配内存(以字节为单位)
BOOL CXmsMemory::FreeXms(DWORD dwSize);//释放内存
BOOL CXmsMemory::SetFloatData(DWORD dwIndex, float fData);//将浮点数写入以字节为单位的索引地址中。
float CXmsMemory::GetFloatData(DWORD dwIndex););//从以字节为单位的索引地址中读出浮点数。

http://www.firstsail.com.cn中可以下载Winsail V2.0编程库,从Sail.lib中可以析出Xms.Obj模块,共14K。