0
필자는 Windows 및 Linux의 다른 컴파일러에서 배열, 벡터, boost :: array를 벤치마킹했습니다. 나는 다음과 같은 이상한 것을 만났다.왜 시간 안에이 실행됩니까?
나는 플래그 리눅스 3.7.0.7에 GCC 4.7.2을 가지고
g++ -O3 -g -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "../main.cpp"
그리고이 코드 : 어떻게
const int arrLength = 5;
int a[arrLength];
for (int i = 0; i < arrLength; i++) {
a[i] = i * 5;
}
srand(time(0)); // randomise at run time so it cannot be precomputed by the compiler
int numbers[10];
for (auto &i : numbers)
i = rand();
clock_t c;
c = clock();
for (int i = 0; i < 100000000; i++) {
for (int j = 0; j < arrLength; j++)
a[j] += numbers[j%10];
}
// write it out so the compiler doesn't omit the whole operation if the values in the array are not being used
for (int x : a)
cout << x;
cout << endl;
cout << (float) (clock() - c) << endl;
실제로 0초에서 실행 ... 수 이 일이 일어날까요?
그래서 컴파일러가 숫자에 100000000을 곱하면됩니까? 어셈블리를 이해할 수 없습니다. –
@ Spacemonkey : 예. –