Что такое ошибка шины?

244
задан Spikatrix 18 October 2015 в 00:44
поделиться

7 ответов

Ошибки шины редки в наше время на x86 и происходят, когда Ваш процессор не может даже делать попытку доступа к памяти, который требуют, обычно:

  • использование инструкции по процессору с адресом, который не удовлетворяет его требования выравнивания.

отказы Сегментации происходят при доступе к памяти, которая не принадлежит процессу, они очень распространены и обычно являются результатом:

  • использование указателя на что-то, что было освобождено.
  • использование неинициализированного следовательно поддельный указатель.
  • использование нулевого указателя.
  • переполнение буфера.

пз: Чтобы быть более точным, это не управляет самим указателем, который вызовет проблемы, он получает доступ к памяти, на которую он указывает на (разыменование).

232
ответ дан bltxd 23 November 2019 в 03:09
поделиться

Один классический экземпляр ошибки шины находится на определенном architecures, такой как SPARC (по крайней мере, некоторый SPARCs, возможно, это было изменено), когда Вы делаете неправильно выровненный доступ. Например:

unsigned char data[6];
(unsigned int *) (data + 2) = 0xdeadf00d;

Этот отрывок пытается записать 32-разрядное целочисленное значение 0xdeadf00d в адрес, который (скорее всего), правильно не выравнивается и генерирует ошибку шины на архитектуре, которая "придирчива" в этом отношении. Intel x86, между прочим, не такая архитектура, он предоставил бы доступ (хотя выполняют его более медленно).

3
ответ дан unwind 23 November 2019 в 03:09
поделиться

Это зависит от Вашей ОС, ЦП, Компилятора, и возможно других факторов.

В целом это означает, что шина ЦП не могла завершить команду или перенесла конфликт, но это могло означать целый диапазон вещей в зависимости от среды и выполняемого кода.

-Adam

2
ответ дан Adam Davis 23 November 2019 в 03:09
поделиться

Можно также получить SIGBUS, когда кодовая страница не может быть разбита на страницы в по некоторым причинам.

6
ответ дан Joshua 23 November 2019 в 03:09
поделиться

я полагаю, что ядро повышает SIGBUS, когда приложение показывает неточное совмещение данных на шине данных. Я думаю, что, так как большинство современных компиляторов для большей части клавиатуры процессоров / выравнивает данные для программистов, проблем выравнивания былого (по крайней мере), смягченного, и следовательно каждый не видит SIGBUS слишком часто в эти дни (AFAIK).

От: Здесь

11
ответ дан Oli 23 November 2019 в 03:09
поделиться

segfault получает доступ к памяти, к которой Нельзя получить доступ. Это только для чтения, у Вас нет разрешения, и т.д.

, ошибка шины А пытается получить доступ к памяти, которая не может возможно быть там. Вы использовали адрес, это бессмысленно к системе или неправильному виду адреса для той операции.

82
ответ дан Clinton Pierce 23 November 2019 в 03:09
поделиться

Это обычно означает невыровненный доступ.

попытка получить доступ к памяти, которая физически не присутствует, также дала бы ошибку шины, но Вы не будете видеть это при использовании процессора с MMU и ОС, это не багги, потому что у Вас не будет никого не существующим с отображенной памятью к адресному пространству Вашего процесса.

2
ответ дан Mark Baker 23 November 2019 в 03:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: