SSE: nicht ausgerichtetes Laden und Speichern, das die Seitengrenze überschreitet

Ich habe irgendwo gelesen, dass vor dem Ausführen eines nicht ausgerichteten Ladens oder Speicherns neben der Seitengrenze (z. B. mit _mm_loadu_si128 / _mm_storeu_si128 intrinsics) sollte der Code zuerst prüfen, ob der gesamte Vektor (in diesem Fall 16 Bytes) zur selben Seite gehört, und wenn nicht, zu Nicht-Vektor-Anweisungen wechseln. Ich verstehe, dass dies erforderlich ist, um Coredump zu verhindern, wenn die nächste Seite nicht zum Prozess gehört.

Aber was ist, wenn beide Seiten zum Prozess gehören (z. B. sind sie Teil eines Puffers und ich kenne die Größe dieses Puffers)? Ich habe ein kleines Testprogramm geschrieben, mit dem das nicht ausgerichtete Laden und Speichern der über die Seitengrenze hinausgehenden Seiten durchgeführt wurde und das nicht abstürzte. Muss ich in einem solchen Fall immer auf Seitengrenzen prüfen, oder reicht es aus, um sicherzustellen, dass der Puffer nicht überläuft?

Env: Linux, x86_64, gcc

Antworten auf die Frage(2)

Ihre Antwort auf die Frage