Есть программка. Мне сказали что она делает решето Эратосфена, но на самом деле это не важно.
int main() { int n = 500000000; int *a = new int[n + 1]; for (int i = 0; i <= n; i++) { a[i] = i; } for (int i = 2; i * i <= n; i++) { if (a[i]) { for (int j = i * i; j <= n; j += i) { a[j] = 0; } } } delete[] a; return 0; }
Вопрос. Почему ни gcc ни clang даже под
Update: в GCC был баг, но теперь его починили и ВЖУХ он оптимизирует весь этот код вникуда.
-O3
не понимают что это всё можно упростить до return 0;
т.к. результат вычислений никуда не используется? Пробовал заменять new/delete на аллокацию на стэке, не помогает.Update: в GCC был баг, но теперь его починили и ВЖУХ он оптимизирует весь этот код вникуда.