Я написал эту простую, бесполезную программу:
#include <iostream>
using namespace std;
#define TABSIZE 256*1024*1024
int main(){
volatile int *tab = new int[TABSIZE];
cerr << "start" << endl;
for(int i=0;i<TABSIZE;i+=1)
tab[i] *= i;
cerr << "stop" << endl;
delete []tab;
return 0;
}
После компиляции (с O2) и запуска с time ./a.out
Я был очень удивлен результатами:
real 0m1,660s
user 0m0,462s
sys 0m1,177s
Очевидно, что большую часть времени проводят в пространстве ядра, хотя основной цикл не имеет никакого отношения к системным вызовам.Я вижу строку start
сразу после запуска программы, поэтому new
не занимает много времени.Понятно, что stop
появляется незадолго до конца.
Итак, вопрос в том, почему столько времени тратится в пространстве ядра?Я использую GCC 7.4 в Linux 4.15.