I'm trying to understand the memory address I see returned when I do something like &testVariable. In this case I'm using an ATSAMD21 with 256K flash and 32K SRAM. testVariable was defined as an integer, and it will use 4 bytes, since this is a SAMD cpu. I stored a 2 in testVariable. &testVariable returns 536871116. If I set up a pointer to return the contents of that address, I get 2 as expected. Addresses 536871117, 536871118, and 536871119 return 0 as expected.
The part I don't understand is the magnitude of those memory addresses, 536,871,116 thru 536,871,119. I was expecting flash to range from 0 to 262,144 bytes and SRAM to range from 262,145 to 294,913. In any case, not addresses in the range of hundreds of millions. Obviously, I'm not understanding something very basic about this.