Для чего мне нужно использовать VirtualAlloc/VirtualAllocEx?Для чего мне нужно использовать VirtualAlloc/VirtualAllocEx?
Пример: один случай, который я нашел - если я выделил 4 ГБ виртуальной памяти, то, если я не использую их все, то я не трачу физическую память, и если я изменю размер моего массива, то я do не нужно делать новое выделение и копирование старых данных в новый массив.
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)
И если бы я использовал стандартный аллокатора, я нужно скопировать данные, когда я изменить размер:
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
Или с standatd распределителем, я должен потратить 4 Гб физической памяти:
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
Но почему это лучше, чем realloc()? http://www.cplusplus.com/reference/cstdlib/realloc/
И есть ли еще случаи использования VirtualAlloc [Ex] с выгодами?