The properties of computer memory
C++ treats memory as a sequence of cells. The size of each cell is 1 byte, and each cell has an address. Accessing a byte in memory by its address is a constant-time operation, O(1), in other words, it's independent of the total number of memory cells. On a 32-bit machine, you can theoretically address 232 bytes, that is, around 4 GB, which restricts the amount of memory a process is allowed to use at once. On a 64-bit machine, you can theoretically address 264 bytes, which is so big that there is hardly any risk of running out of addresses.
The following figure shows a sequence of memory cells laid out in memory. Each cell contains 8 bits. The hexadecimal numbers are the addresses of the memory cells:
Figure 4.1: A sequence of memory cells
Since accessing a byte by its address is an O(1) operation, from a programmer's perspective, it's tempting to believe that each memory cell is equally quick to access. This approach...