PavelKunyavskiy's blog

By PavelKunyavskiy, 11 years ago, In Russian

Добрый день.

Некоторое время назад мы наткнулись на интересный баг. Я был бы рад, если бы кто-то мог мне его объяснить.

Посмотрим на такой код

int main(){
    for(;;);
    return 0;
}

Скомпилируем его с помощью обычного g++. При запуске, он ожидаемо зависает. Прервем процесс.

Теперь попробуем сделать немного по-другому. Добавим в строку компиляции -Wl,--stack=925000001. Запустим процесс, он снова зависнет(неожиданно правда?). Однако, при нажатии Ctrl+C, он полностью занимает ядро процессора и не собирается завершаться.

Константа 925000001 найдена бинпоиском, на границе эффект воспроизводится не очень стабильно, иногда не убивается один из 2-3 запусков. Воспроизвелось на нескольких Win7.

Проблема не у gcc, потому что у MSVS2010 происходит тоже самое, только начиная с 9400000001 стека.

Так же было бы интересно воспроизводится ли под другими версиями windows.

  • Vote: I like it
  • +30
  • Vote: I do not like it