Учитывая предоставленную вами информацию, ответ 0.
0 - единственный ответ, действительный в соответствии со стандартом C ++ .
Если вы готовы пойти на неопределенное поведение (подсказка: нет), вам придется предоставить нам некоторую информацию для конкретной платформы и прощаются с любыми гарантиями о действительности вашего заявления. Ваше приложение может все еще работать, но вы полагаетесь на произвольные и, возможно, изменяющиеся решения, принимаемые разработчиками ОС и компиляторов.
Если нам известны точные сведения о вашей платформе (какой процессор, ОС, какой компилятор, в первую очередь), то может быть возможно дать вам ответ, который будет обычно работать, если ничего не изменится. в компиляторе или в ОС.
Но похоже, что вы идете по этому поводу неправильно. Если это так критично для производительности, как вы все время говорите, организуйте это так, чтобы переполнение указателя не было проблемой .
Строго говоря, добавление что-нибудь к указателю, который указывает на тот же блок памяти, на который он указывал ранее, не определено. Это может сработать, или это может на самом деле выглядеть очень забавно на некоторых архитектурах. Он может переполниться в неожиданное время, в некоторых случаях это может привести к серьезным сбоям. Вот почему язык просто говорит «это запрещено», и поэтому мы не можем сказать, что произойдет на практике, если вы не сказали нам платформу, на которой он работает.
Указатель C ++ не является адресом памяти . Именно так обычно и реализуют компиляторы, но они подчиняются другим правилам. В соответствии с набором инструкций процессора некоторые вещи допустимы с адресами памяти, что недопустимо с указателями.
А если серьезно, мой лучший совет: сделайте шаг назад и выясните, как можно избежать необходимости для проверки на переполнение.