Как происходит аппаратное прерывание в указателе «три за концом», даже если указатель никогда не разыменовывается?

В его1 ноября 2005 г. C ++ колонкаХерб Саттер пишет ...

<code>int A[17];
int* endA = A + 17;
for( int* ptr = A; ptr < endA; ptr += 5 )
{
  // ...
}
</code>

[O]n some CPU architectures, including current ones, the aforementioned code can cause a hardware trap to occur at the point where the three-past-the-end pointer is created, whether that pointer is ever dereferenced or not.

Как процессор перехватывает бит-паттерн? Как насчет ...

<code>int A[17];

// (i) hardware will trap this ?
int *pUgly = A + 18; 

// (ii) hardware will trap this, too?
int *pEnd = A + 17;
++pEnd;  

// (iii) will this fool it?
int *precious = A + 17;
unsigned long tricksy = reinterpret_cast<unsigned long>(precious) ; 
++tricksy;
int *pHobbits = reinterpret_cast<int *>(tricksy); 
</code>

Бонусный вопрос: должна ли фраза «некоторые текущие архитектуры ЦП» обычно понимается как относящийся только к отгрузочным продуктам, или он также включает в себя воображаемые архитектуры, если произведение художественной литературы, в котором они описаны или на которые есть ссылки, имеет дату недавней публикации?

Ответы на вопрос(2)

Ваш ответ на вопрос