Elo*_*off 5 c c++ linux windows operating-system
memcpy/memmove从源复制(复制数据)到源.是否存在将页面从一个虚拟地址移动到另一个虚拟地址而不进行源数据的实际逐字节复制的情况?对我来说似乎完全可能,但是任何操作系统实际上都允许这样做吗?对我来说,动态阵列是如此广泛和流行的概念似乎很奇怪,但通过物理复制来增长它们是一种浪费的操作.它只是当你开始谈论在千兆字节数组的大小不能扩展(如想象成长100GB的阵列到阵列200GB,这是这是完全有可能对在<$ 10K系列服务器现在的一个问题.
void* very_large_buffer = VirtualAlloc(NULL, 2GB, MEM_COMMIT);
// Populate very_large_buffer, run out of space.
// Allocate buffer twice as large, but don't actually allocate
// physical memory, just reserve the address space.
void* even_bigger_buffer = VirtualAlloc(NULL, 4GB, MEM_RESERVE);
// Remap the physical memory from very_large_buffer to even_bigger_buffer without copying
// (i.e. don't copy 2GB of data, just copy the mapping of virtual pages to physical pages)
// Does any OS provide support for an operation like this?
MoveMemory(very_large_buffer, even_bigger_buffer, 2GB)
// Now very_large_buffer no longer has any physical memory pages associated with it
VirtualFree(very_large_buffer)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
424 次 |
| 最近记录: |