> А не должен был? В системе кончилась память - он и возбух.Я не много знаю про OOM killer, но он там как-то определяет, что убить, а что оставить. Теоретически, он мог прибить не тест, а что-то полезное.
Да и то, пока не будет swap'а - тест не особо интересен. Именно из-за наличия swap'а, можно словить тормоза.
> А кернель сильно древний?
Не знаю, но версия такая: 3.10.0-1062.9.1.el7.x86_64
> Ну и его вручную можно попросить alt-sysrq-f.
Вот что-что, а хоткеи в линуксе/ОС - это ещё одна больная тема, с которой я сталкиваюсь (хотя тут, наверное, X'ы уже виноваты, а не ядро). Элементарно не работают комбинации ctrl-shift-<some-key> (по ctrl-shift у меня переключение языка) (хотя в той же винде в той же программе (kicad, например) всё работает), а вы говорите про alt-sysrq-f, которые я жму - ничего не происходит. То ли оно работает, но не подаёт виду, то ли что-то опять не так с хотекеями... Но запускать свой тот тест и проверять alt-sysrq-f - не хочу рисковать опять жёстко вырубать комп :)
> Я кстати не полностью понял что оно делает с -O2.
0000000000400440 <main>:
400440: 48 83 ec 08 sub rsp,0x8
400444: 0f 1f 40 00 nop DWORD PTR [rax+0x0]
цикл 1: вызываем malloc(1 GB):
400448: bf 00 00 00 40 mov edi,0x40000000
40044d: e8 de ff ff ff call 400430 <malloc@plt>
делаем "цикл 1", пока он возвращает указатели:
400452: 48 85 c0 test rax,rax
400455: 74 f1 je 400448 <main+0x8>
цикл 2: заводим счётчик на 1 GB / 8:
400457: b8 00 00 04 00 mov eax,0x40000
40045c: 0f 1f 40 00 nop DWORD PTR [rax+0x0]
делаем "цикл 2", пока счётчик не 0:
400460: 83 e8 01 sub eax,0x1
400463: 75 fb jne 400460 <main+0x20>
повторяем "цикл 1"
400465: eb e1 jmp 400448 <main+0x8>
Итого: компилятор выпилил запись в память. Мы впустую типа запросим память и впустую прокрутимся в пустых циклах.