2012-06-17 6 views
6

Solo curioso se Sto creando un array di memoria condivisa su piattaforma Windows in questo modo:L'array di memoria condivisa restituito da CreateFileMapping/MapViewOfFile è zero inizializzato?

HANDLE hFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE | SEC_COMMIT, 0, 1024 * 4, _T("mySharedMemName")); 
if(hFile) 
{ 
    VOID* pData = MapViewOfFile(hFile, FILE_MAP_ALL_ACCESS, 0, 0, 1024 * 4); 

    //Is 'pData' array initialized with zeros the first time the 'hFile' is used? 
} 

è l'array di memoria inizializzato con 0 è la prima volta che io chiamo questo frammento di codice? E se no, come renderlo zero inizializzato?

+1

maggior parte dei sistemi operativi lo zero riempire tutte le pagine che sono state recentemente mappati nello spazio di indirizzi di un processo (a meno che tali pagine sono condivisi o supportati da file su disco o periferiche). Non farlo sarebbe imprudente dal punto di vista della sicurezza. –

risposta

7

Dal documentation:

I contenuti iniziali delle pagine in un oggetto di file di mapping supportato dal file di paging del sistema operativo sono 0 (zero).

+0

Grazie. Evidentemente me lo sono perso. È bello che non dobbiamo cancellarlo. – ahmd0

Problemi correlati