summaryrefslogblamecommitdiff
path: root/meap/meap-code/ch6/ch6-memscan-1/src/main.rs
blob: b92da20fe6127d37247426fb31f138f2288ff60c (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14













                                                                                                                                                                                                                                                                      
fn main() {
    let mut n_nonzero = 0;  

    for i in 0..10000 { 
        let ptr = i as *const u8; // <1> Convert `i` to a `pass:[*const T]`, a "`raw pointer`" of type `u8`. Raw pointers allow programmers to inspect raw memory addresses. We treat every address as a unit, ignoring the fact that most values span multiple bytes.
        let byte_at_addr = unsafe { *ptr }; // <2> _Dereference_ the pointer. That is, read the value at address `i`. Another way of saying this is read the value being pointed to.

        if byte_at_addr != 0 {
            n_nonzero += 1;
        }
    }

    println!("non-zero bytes in memory: {}", n_nonzero);
}