Это очень зависит от платформы, поэтому я не рекомендую полагаться на такую информацию, если у вас нет веских причин и вы не знаете о последствиях для переносимости, удобства обслуживания и т. Д.
NULL гарантированно всегда будет 0x0. Если я правильно помню, x86 резервирует первые 128 МБ адресного пространства как «эквивалентные NULL», так что действительные указатели не могут принимать значения в этом диапазоне. На x64 есть дополнительных адреса , с которыми вы не должны сталкиваться на практике, по крайней мере, на данный момент.
Что касается адресного пространства, зарезервированного для операционной системы, оно будет явно зависеть от ОС. В Linux деление пространства между ядром и пользователем настраивается в ядре, поэтому по крайней мере 3 разделения: 1-3 ГБ, 2-2 ГБ и 3-1 ГБ распространены в 32-разрядных системах. Вы можете найти более подробную информацию на kerneltrap .