For what do I need to use VirtualAlloc/VirtualAllocEx?

An example, one case that I found - if I allocated 4 GB of virtual memory, then if I do not use all of them, then I do not spend physical memory, and if I resize my array, I **do not need to do new allocating and copying old data** to new array.

```
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)

```

And if I used standard allocator, I **need to copy of data** when I do resize:

```
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

```

Or with standatd allocator, I **must spend 4GB** of physical memory:

```
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

```

But, why this is better than realloc()?
<http://www.cplusplus.com/reference/cstdlib/realloc/>

And are there any else cases to use VirtualAlloc[Ex] with benefits?