Como um trap de hardware em um ponteiro de três últimos pontos termina mesmo que o ponteiro nunca seja desreferenciado?

No dele1 de novembro de 2005 Coluna C ++, Herb Sutter escreve ...

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

Em algumas arquiteturas de CPU, incluindo as atuais, o código mencionado acima pode causar uma interceptação de hardware no ponto em que o ponteiro três-passado-a-fim é criado, se esse ponteiro nunca é desreferenciado ou não.

Como uma armadilha de CPU em um bitpattern? Sobre o quê ...

<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>

Pergunta bônus: A frase "algumas arquiteturas de CPU atuais" deve ser normalmente entendida como se referindo apenas a produtos de remessa, ou também inclui arquiteturas imaginárias se o trabalho de ficção no qual eles são descritos ou aludidos tiver uma data de publicação recente?

questionAnswers(2)

yourAnswerToTheQuestion