用MMU管理吧。也就是采用虚拟地址。因为如果你直接对数据进行移位,一单程序大了,你是非常难保证持有已分配数据的指针都得到更新的。对于大型程序来说,基本等于不可能。
通过MMU,你可以把不连续的物理页面映射成连续的虚拟地址空间。当前,你也可以把原来的物理页面进行移动,而保持它们的虚拟地址不变。
因此:
如果你存在DMA,需要连续的2M来进行WAVE内存数据到声卡的传输,则可以移动1和3的物理页,腾出2M的连续物理空间。
如果你只是想在应用程序看来有2M连续的空间,供你存放你的WAVE数据。那你可以直把2、4通过MMU映射成连续的。
|
|