È il senso comune. Non è necessario documentare neanche 1 + 1 = 2.
Un sistema operativo che nasconde i segreti tra i processi sarebbe inutile per molte applicazioni. Quindi, se un sistema operativo per scopi generali che vuole essere generale, isolerà i processi. Tenere traccia di quali pagine potrebbero contenere segreti e quali sono sicuri sarebbe troppo lavoro e troppo soggetto a errori, quindi presumiamo che ogni pagina che sia mai stata utilizzata sia sporca e contenga segreti. L'inizializzazione di nuove pagine con garbage è più lenta di inizializzarle con un solo valore, in modo da non utilizzare la spazzatura casuale. Il valore più utile è zero (per calloc
o bss, ad esempio), quindi le nuove pagine vengono azzerate per eliminarle.
Non c'è davvero altro modo per farlo.
Potrebbero esserci sistemi operativi per scopi speciali che non lo fanno e nascondono segreti tra i processi (potrebbe essere necessario, ad esempio, per requisiti in tempo reale). Alcuni vecchi sistemi operativi non avevano una gestione della memoria e un isolamento dei privilegi decenti. Inoltre, malloc
riutilizzerà la memoria precedentemente liberata all'interno dello stesso processo. Pertanto, malloc
verrà documentato per contenere rifiuti inutili non inizializzati. Ma questo non significa che sarai mai in grado di ottenere memoria non inizializzata da un altro processo su un sistema operativo per scopi generici.
Immagino che una semplice regola empirica sia: se il tuo sistema operativo ti chiede mai una password, non darà a un processo pagine non inizializzate e poiché l'azzeramento è l'unico modo ragionevole per inizializzare le pagine, verranno azzerate.
Per cosa ti serve? Stai cercando di ottenere valori casuali? – dbush
Sembra un problema XY. –
Forse è per curiosità e/o necessità di apprendimento. Una domanda valida in entrambi i casi. –