大家知道,可以用VirtualAlloc先保留一个大范围的虚拟地址空间,然后再一点一点的提交物理内存.
    现在有一个问题,如果我保留了一个8M空间,但是当时只提交了4M物理内存,然后进行了其他内存操作,最后,我又将剩下的4M提交了物理内存,这样,在8M空间内,虽然虚拟地址连续,但是物理地址可能是不连续的吧
    这样的话,如果我使用memcpy,memset,strcpy之类的函数,进行跨这两个4兆空间的操作时,会不会出现错误呢,也就是说,这些函数的参数应该都指的是虚拟地址吧,如果发现其所操作的虚拟空间并不是全部映射到一个连续的物理空间时,会不会自动调整以适应呢?

解决方案 »

  1.   

    肯定会的,要知道内存十分页的。
    你说的情况就是两个页在物理上是分离的
    但在逻辑上(虚拟地址)是相邻的。
    memcpy,memset,strcpy是相对于虚拟地址来说的。
    他们肯定能够处理这种情况
      

  2.   

    这个问题我没有查阅到相关资料可以解释,编了一个简单的程序来验证,发现可能不会产生错误,但是我的测试程序也不能保证VirtualAlloc分配的虚拟空间连续而物理内存不连续,所以还是希望有人回答一下
      

  3.   

    是吗,楼上的,你是说我们平时使用内存时就可能遇到这种情况,无论是否用VirtualAlloc