W jaki sposób zdarza się pułapka sprzętowa w wskaźniku trzy-końcowym, nawet jeśli wskaźnik nigdy nie jest wyłuskiwany?

W jego1 listopada 2005 kolumna C ++, Herb Sutter pisze ...

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

[O] n w niektórych architekturach procesora, w tym w architekturach bieżących, wspomniany kod może spowodować wystąpienie pułapki sprzętowej w miejscu, w którym tworzony jest wskaźnik trzech ostatnich końców, niezależnie od tego, czy wskaźnik ten jest kiedykolwiek dereferencjonowany, czy nie.

Jak pułapka procesora działa na sygnaturze bitowej? Co powiesz na ...

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

Pytanie bonusowe: Czy wyrażenie „niektóre obecne architektury procesorów” należy zwykle rozumieć jako odnoszące się wyłącznie do produktów wysyłkowych, czy też obejmuje również wyimaginowane architektury, jeśli dzieło fikcyjne, w którym są one opisane lub o których mowa, ma ostatnią datę publikacji?

questionAnswers(2)

yourAnswerToTheQuestion