I know that long time ago computer scientists decided to treat all pointers to memory cell of address 0 as NULL.
Un po ', e praticamente, si. Tuttavia, tornando al linguaggio C, nei giorni di yore, il numero letterale 0
viene considerato come il valore null
in un contesto puntatore. Tuttavia, lo standard non richiede che null
abbia un valore di pattern di bit di tutti gli zeri. Ad esempio, potrebbe essere una scelta di implementazione, essere invece -1 (lo schema di bit di tutti). Tuttavia, nel corso degli anni, gli implementatori hanno definito il modello di bit di tutti gli zeri per indicare null
.
However, the memory cell at that address does exists after all, right? In that case, what value is stored there? Since it's OS that decides how to allocate memory it should be able to access (and modify) value of all cells in the RAM, including the one of index 0, right?
Dovresti decidere in quale contesto ti stai chiedendo: direttamente sul processore o in un processo su un sistema operativo.
Su un controller / processore embedded, potresti non avere un sistema operativo con memoria virtuale. Inoltre, è comune che i microprocessori non solo abbiano memoria a zero (e / o in highmem) che si riferisce a dispositivi I / O, o è altrimenti speciale piuttosto che vera memoria, sebbene la memoria vera sia anche comunemente trovata all'indirizzo zero . Quindi, in questo ambiente, zero esiste come indirizzo e può essere o non essere speciale per il processore in qualche modo.
Per un processo in esecuzione all'interno di un sistema operativo che offre memoria virtuale, i sistemi operativi moderni spesso scelgono di mappare un numero di pagine intorno allo zero in modo efficace a undefined, quindi semplicemente non c'è alcuna memoria reale all'indirizzo zero. Una richiesta di accesso alla memoria a zero provocherà un errore (come un errore di segmentazione).
D'altro canto, alcuni sistemi operativi forniranno pagine di zero di sola lettura e permetteranno letture a zero o intorno a zero, mentre solo errori su scritture a zero.