дубликат memcpy / memmove (копирование данных) из источника в место назначения. Существует ли что-либо для перемещения страниц с одного виртуального адреса на другой без фактической побайтной копии исходных данных? Мне кажется, это вполне возможно, но позволяет ли это какая-либо операционная система? Мне кажется странным, что динамические массивы являются настолько распространенным и популярным понятием, но выращивание их путем физического копирования является такой расточительной операцией. Он просто не масштабируется, когда вы начинаете говорить о размерах массива в гигабайтах (например, представьте, что массив 100 ГБ можно превратить в массив 200 ГБ. Это проблема, которая полностью возможна на серверах в диапазоне
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)