Zgodnie z Wikipedia strona Segmentation fault, błąd magistrali może być spowodowany przez unaligned dostęp do pamięci. Artykuł podaje przykład, jak wyzwalać błąd magistrali. W tym przykładzie musimy włączyć sprawdzanie wyrównania, aby zobaczyć błąd magistrali. Co się stanie, jeśli wyłączymy sprawdzanie wyrównania?Czy brak dostępu do pamięci zawsze powoduje błędy magistrali?
Program wydaje się działać poprawnie. Mam dostęp do niewyrównanej pamięci programu i jest używany przez kilka osób, ale nikt nie zgłasza mi błędów magistrali lub innych dziwnych wyników. Jeśli wyłączymy sprawdzanie wyrównania, jaki jest efekt uboczny niewspółrzędnej pamięci?
Platformy: pracuję nad x86/x86-64. Próbowałem także mojego programu, kompilując go z "gcc -arch ppc" na Macu i działa poprawnie.
Co to jest platforma, nad którym pracujesz ?? –
Pavel Minaev w dużej mierze odpowiada na moje pytanie. Pracuję na x86/x86_64. Próbowałem mojego programu, kompilując go z "gcc -arch ppc" na Macu i działa poprawnie. – user172818
Należy zauważyć, że niewyrównany dostęp do pamięci (a nawet po prostu przypisanie wskaźnika) jest niezdefiniowanym zachowaniem, zgodnie ze standardem C - więc kompilator zgodny z prawem może wykonać * cokolwiek *, jeśli to zrobisz (chociaż nie wszystkie kompilatory skorzystają z tej wolności). – sleske