the process address space
Imagine each process is handed its own private apartment, numbered room by room from the front door (address 0) to the far wall (the highest address). Inside, the process arranges its furniture however it likes, and it cannot see or touch anyone else's apartment. The process address space is this private, numbered range of memory addresses that one process is allowed to use, laid out into well-known regions.
A typical layout, from low addresses upward, is: the text (code) segment holding the machine instructions; then the initialized data and the BSS (uninitialized data) holding global and static variables; then the heap, which grows upward as the program asks for more memory at run time; and at the top, the stack, which grows downward as functions are called. The heap and the stack grow toward each other across the big empty gap in the middle, so each has room to expand. Crucially these are usually virtual addresses: the same address number in two processes refers to different physical memory, because the hardware translates each process's addresses separately. That is what keeps the apartments private.
This abstraction is doing a lot of quiet work. It lets each process pretend it owns a clean, contiguous block of memory starting at zero, while the OS and the memory hardware secretly scatter the real storage wherever it fits. It is the foundation of protection (one process cannot read another's address space without permission) and of virtual memory (parts of the space can live on disk and be brought in on demand). A common misconception is that the address space is the actual RAM used; it is really a map of addresses, much of which may be unbacked, shared, or paged out at any moment.
A 32-bit process can name addresses from 0 to 2^32 - 1, a 4 GB range, even on a machine with only 1 GB of RAM. Most of that range is empty; only the code, data, heap pages, and stack pages it actually touches are backed by real memory.
The address space is a map of possible addresses, not a measure of RAM used.
The neat picture (text, data, BSS, heap, gap, stack) is the classic layout; real systems add shared libraries, memory-mapped files, and randomized placement, so do not assume fixed addresses.