Ошибки шины редки в наше время на x86 и происходят, когда Ваш процессор не может даже делать попытку доступа к памяти, который требуют, обычно:
отказы Сегментации происходят при доступе к памяти, которая не принадлежит процессу, они очень распространены и обычно являются результатом:
пз: Чтобы быть более точным, это не управляет самим указателем, который вызовет проблемы, он получает доступ к памяти, на которую он указывает на (разыменование).
Один классический экземпляр ошибки шины находится на определенном architecures, такой как SPARC (по крайней мере, некоторый SPARCs, возможно, это было изменено), когда Вы делаете неправильно выровненный доступ. Например:
unsigned char data[6];
(unsigned int *) (data + 2) = 0xdeadf00d;
Этот отрывок пытается записать 32-разрядное целочисленное значение 0xdeadf00d
в адрес, который (скорее всего), правильно не выравнивается и генерирует ошибку шины на архитектуре, которая "придирчива" в этом отношении. Intel x86, между прочим, не такая архитектура, он предоставил бы доступ (хотя выполняют его более медленно).
Это зависит от Вашей ОС, ЦП, Компилятора, и возможно других факторов.
В целом это означает, что шина ЦП не могла завершить команду или перенесла конфликт, но это могло означать целый диапазон вещей в зависимости от среды и выполняемого кода.
-Adam
Можно также получить SIGBUS, когда кодовая страница не может быть разбита на страницы в по некоторым причинам.
я полагаю, что ядро повышает SIGBUS, когда приложение показывает неточное совмещение данных на шине данных. Я думаю, что, так как большинство современных компиляторов для большей части клавиатуры процессоров / выравнивает данные для программистов, проблем выравнивания былого (по крайней мере), смягченного, и следовательно каждый не видит SIGBUS слишком часто в эти дни (AFAIK).
От: Здесь
segfault получает доступ к памяти, к которой Нельзя получить доступ. Это только для чтения, у Вас нет разрешения, и т.д.
, ошибка шины А пытается получить доступ к памяти, которая не может возможно быть там. Вы использовали адрес, это бессмысленно к системе или неправильному виду адреса для той операции.
Это обычно означает невыровненный доступ.
попытка получить доступ к памяти, которая физически не присутствует, также дала бы ошибку шины, но Вы не будете видеть это при использовании процессора с MMU и ОС, это не багги, потому что у Вас не будет никого не существующим с отображенной памятью к адресному пространству Вашего процесса.