Yes, there is a range, and you can determine that range trivially for any running process. Read a given process' /proc/<pid>/maps
to see its memory layout, as well as the type of memory in each address range. This is described in proc(5)
. A sample from an embedded device:
root@UP-7197:~# cat /proc/self/maps
00400000-0044b000 r-xp 00000000 1f:02 944 /bin/busybox
0045b000-0045c000 rw-p 0004b000 1f:02 944 /bin/busybox
77450000-77472000 r-xp 00000000 1f:02 802 /lib/libgcc_s.so.1
77472000-77473000 rw-p 00012000 1f:02 802 /lib/libgcc_s.so.1
77474000-77506000 r-xp 00000000 1f:02 891 /lib/libc.so
77513000-77514000 r--p 00000000 00:00 0 [vvar]
77514000-77515000 r-xp 00000000 00:00 0 [vdso]
77515000-77517000 rw-p 00091000 1f:02 891 /lib/libc.so
77517000-77519000 rwxp 00000000 00:00 0
7fc55000-7fc76000 rw-p 00000000 00:00 0 [stack]
The syntax is explained over at Stack Overflow.