香港打宫颈癌疫苗价格:我写了一个用数组实现二级映射的程序,指针用的不好不知到要怎么样实现这个功能?

来源:百度文库 编辑:高校问答 时间:2024/05/02 02:24:48
我写了一个用数组实现二级映射的程序,指针用的不好不知到要怎么样实现这个功能
请大虾看看,指点一下.
//初始化

int pindex=5;//页目录大小(数组元素个数)(当然实际大小是个数*2(int 所占字节))
int index=5;//页表大小
int psize=5;//页大小(页目录存各个页表首地址,页表存页首地址

int *pageindex = new int[pindex];
int *page = new int[index];
for(int i=0;i<pindex;i++)
{
*ppi=pp;//页目录第一个元素指向第一个页表地址,后来想想,这不是个转换错
//误么,要实现这样的功能,要怎么样做呢,请打下指点,谢谢了!
ppi++;
for(int j=0;j<index;j++)
{
*pp = pa;
pp++;
for(int k=0;k<psize;k++)
{
*pa =1;
pa++;
}
}
}

//////注意:
这样只能实现一级映射啊
index = getindex(); //函数得到index大小.
int **p = new int*[index];
//建一个指向int*指针类型的数组,里面有5个int型指针元素
for ( int i = 0; i < index ; i++ )
{
int page = GetPage(); // 你的函数得到page大小.
int *pp = new int[page];
//因为这里的数组个数也是个不确定的
//一个数组当然可以,要是是一组好象有点麻烦的
//~~~~~~~~~~~~~~
p[i] = pp; //将建立的int数组首地址加入p
}
index=get_index();
pindex=get_pindex();
psize=get_psize();
pageindex = new int**[pindex];
page = new int*[index*pindex];
for(int i=0;i<pindex;i++)
{
for(int j=0;j<index;j++)
{
for(int k=0;k<psize;k++)
{
pa++;
}
pa-=psize;
page[j+index*i]=pa;
pa+=psize;
}
page+=index*i;
pageindex[i]=page;
page-=index*i;
}

这样就可以了,哈哈
不过我用在内存内存管理的程序里
好象不能实现存储 不知道为什么
存储程序如下
vir_change();
pageindex+=a;
page=*pageindex;
page+=b;
pa=*page;
pa+=c;

}
void vir_change()
{
int aa=1,bb=0,cc=1,dd=1,ee=1,ff=0;
for(int i=0;i<psize/2;i++)
aa=aa*2;
a=x%aa;
bb=x/aa;
for(int j=0;j<index/2;j++)
cc=cc*2;
b=bb%cc;
dd=bb/cc;
for(int k=0;k<pindex/2;k++)
ee=ee*2;
c=dd%ee;
ff=dd/ee;
}

请大虾指教啊