Что произойдет, если заполнить всю оперативную память нулями - PullRequest
0 голосов
/ 03 июня 2019

Что будет с ПК, если запустить фрагмент кода?

...
for (char* ptr = 0; &*ptr < RAM_SIZE; ++ptr)
{
    *ptr = 0;
}
...

1 Ответ

3 голосов
/ 03 июня 2019

На практике на современном ПК с современной операционной системой попытка записи в адрес памяти 0 приведет к ошибке сегментации, и операционная система завершит программу.

На некоторых встроенных аппаратных средствах или ПК с операционной системой без защиты памяти (например, MS-DOS) компьютер, скорее всего, зависнет быстро, потому что вы будете перезаписывать области памяти, важные для операционной системы, и ЦП будет в конечном итоге выполнение «случайного» машинного кода, который в большинстве случаев в конечном итоге приводит к зависанию процессора. Для восстановления вам может потребоваться полный сброс или отключение питания. Если вам повезет меньше, вы можете испортить, например, содержимое диска.

На уровне языка присвоение 0 указателю аналогично присвоению ему нулевого указателя. Разыменование нулевого указателя (это *ptr = 0;) является неопределенным поведением, поэтому теоретически компилятор может сгенерировать любой машинный код, который можно себе представить для этого исходного кода (потому что он может доказать, что у вас есть неопределенное поведение прямо здесь). Так что в теории все может случиться, когда вы запустите это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...