Occhio però che _msize non è standard, è supportato solo da Visual C++; inoltre funziona solo se:
  • il blocco allocato è stato interamente utilizzato per la struttura in questione; la questione non è così ovvia, visto che malloc può restituire blocchi più grandi del richiesto:
    The malloc function allocates a memory block of at least size bytes. The block may be larger than size bytes because of space required for alignment and maintenance information.
    ;
  • il blocco è stato allocato con l'allocator della stessa CRT di cui richiami _msize. Di conseguenza non funzionerà se per allocare il blocco è stata usata una API di allocazione della memoria come GlobalAlloc, HeapAlloc, LocalAlloc o altre API di gestione della memoria (ad esempio MapViewOfFile); inoltre non è garantito che funzioni se è stata allocata con new (anche se di solito new usa internamente malloc), né funzionerà se il codice che ha allocato il blocco usa una CRT differente, come una CRT di una versione diversa di Visual C++ o di un altro compilatore, un'altra versione della stessa CRT (ad esempio, CRT di debug vs CRT di release, CRT a linking dinamico vs CRT a linking statico, eccetera), cosa piuttosto frequente se il tuo codice o il codice che ha allocato il blocco è in una libreria.

In sostanza, ti sconsiglio di utilizzarlo, mi pare una feature utile solo in casi estremamente rari (ad esempio nella creazione di garbage collector, bounds checker, leaks detector o altro codice di gestione e controllo della memoria).