"loop.c":
Code: Select all
#include
#include
#include
const int N = 1024*4;
int main(void) {
double* v = malloc(N * sizeof(double));
for(int i = 0; i < N; i++)
v[i] = sin(i);
double sum = 0;
for(int i = 0; i < N; i++)
for(int j = 0; j < N; j++)
for(int k = 0; k < N; k++)
sum += v[i] + 2 * v[j] + 3 * v[k];
printf("sum = %f\n", sum);
free(v);
}
Code: Select all
#include
#include
#include
const int N = 1024 * 4;
int main() {
std::vector v(N);
for(int i = 0; i < N; i++)
v[i] = sin(i);
double sum = 0;
for(int i = 0; i < N; i++)
for(int j = 0; j < N; j++)
for(int k = 0; k < N; k++)
sum += v[i] + 2 * v[j] + 3 * v[k];
printf("sum = %f\n", sum);
}
Ich frage mich, ob es eine Compiler-Einstellung, eine Umgebungsvariable oder etwas anderes gibt, das dafür sorgen könnte, dass die C++-Version genauso speichersparend ist wie ihr C-Äquivalent, while Ich verwende immer noch STL (
Code: Select all
std::vector
Ich hoffe, dass es eine solche Einstellung gibt, denn eines der Designprinzipien von C++ ist:
Was Sie nicht nutzen, bezahlen Sie nicht (zeitlich oder räumlich) und außerdem: Was Sie nutzen, können Sie nicht besser per Hand programmieren.
Um die Frage fokussiert zu halten: Ich bin nicht daran interessiert, zu einer Alternative zu wechseln libstdc++-Implementierungen, aber ich kann Clang anstelle von GCC verwenden, wenn das hilft.
Update: Das habe ich getan Noch etwas experimentieren:
"run.sh":
Code: Select all
for i in `seq 1000`; do
nice ./a.out &
done
Code: Select all
$ killall a.out