CD
Когда вызывается VirtualAlloc, то если память очищена, то она просто отдаётся процессу. Если её не успели очистить, то очистка происходит внутри VirtualAlloc. Это делается, чтобы какие-нибудь серьюрные данные не попали чужому приложению.
Т.е. если выделил новую память, для которой потребовался ViatualAlloc, то она будет обнулена (системой). Если же внутри приплюснутого кода выделил (malloc'ом), использовал, освободил, снова выделил, то может попасться уже использованная (своим же процессом) память, которая будет не обнулённой.
Как я понимаю, new обнуляет всегда.