По умолчанию куча Windows выполняет дополнительную логику, чтобы гарантировать, что никакие два потока не выделяют память из кучи одновременно. Как именно это делается, остается секретом, но, вероятно, это будет примерно так:
EnterCriticalSection (&cs);
... // Perform logic to allocate memory, set list pointers, ...
LeaveCriticalSection (&cs);
Однако, если ваше приложение не использует многопоточность, критические разделы могут иметь небрежные накладные расходы. Чтобы устранить эти издержки, вы должны передать флаг HEAP_NO_SERIALIZE, который удалит вызовы в критическую секцию, что приведет к несколько более быстрому приложению.