Para o que eu preciso usar o VirtualAlloc / VirtualAllocEx?

Para o que eu preciso usar o VirtualAlloc / VirtualAllocEx?

Um exemplo, um caso que eu encontrei - se eu aloquei 4 GB de memória virtual, então se eu não usar todos eles, então eu não gasto memória física, e se eu redimensionar meu array, eunão precisa fazer nova alocação e cópia de dados antigos para nova matriz.

struct T_custom_allocator; // which using VirtualAllocEx()
std::vector<int, T_custom_allocator> vec;
vec.reserve(4*1024*1024*1024);  // allocated virtual memory (physical memory is not used)
vec.resize(16384); // allocated 16KB of physical memory
// ...
vec.resize(32768); // allocated 32KB of physical memory 
                   // (no need to copy of first 16 KB of data)

E se eu usasse o alocador padrão, euprecisa copiar dados&nbsp;quando eu faço redimensionar:

std::vector<int> vec;
vec.resize(16384); // allocated 16KB of physical memory
// ...
vec.resize(32768); // allocated 32KB of physical memory 
                   // and need to copy of first 16 KB of data

Ou com o alocador standatd, eudeve gastar 4GB&nbsp;de memória física:

std::vector<int> vec;
vec.reserve(4*1024*1024*1024);  // allocated 4GB of physical memory
vec.resize(16384); // no need to do, except changing a local variable of size
// ...
vec.resize(32768); // no need to do, except changing a local variable of size

Mas, por que isso é melhor que realloc ()?http://www.cplusplus.com/reference/cstdlib/realloc/

E há mais casos para usar o VirtualAlloc [Ex] com benefícios?