Это может не дойти до платформы, если компилятор откажется порождать memory access. И он не обязан порождать memory access, он вообще не обязан пользоваться той же памятью, что и платформа.
просто это кароче какое то буквоедство. в стандарте имелось ввиду лишь то что среди значений переменной для поинтера должно быть специальное значение для NULL. И все эти абстрактные формулировки лишь для того чтобы сказать какое это значение - детали реализации. - получайте его через (void*)0. То что там в ядре что-то есть для старых конпиляторов костыли, то это просто костыли.