Как сделать C++ таким же экономичным в использовании памяти, как C, при этом используя STL?Linux

Ответить
Anonymous
 Как сделать C++ таким же экономичным в использовании памяти, как C, при этом используя STL?

Сообщение Anonymous »

Эти программы на C и C++ эквивалентны:
"loop.c":

Код: Выделить всё

#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);
}
"loop.cpp"

Код: Выделить всё

#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);
}
Но когда я запускаю их в своей системе (скомпилированные с помощью gcc -O2 -lm и g++ -O2 -fno-Exceptions), версия C использует 800 КБ , в то время как C++ использует 1600 КБ, а иногда в середине выполнения оно подскакивает до 3300 КБ - я не заметил, чтобы версия C делала это (я смотрю на "RES" вверху, а программа работает)
Интересно, есть ли какой-нибудь параметр компилятора, или переменная среды, или что-то еще, что могло бы сделать версию C++ такой же экономичной с использованием памяти, как ее эквивалент C, при этом все еще используя STL (

Код: Выделить всё

std::vector
, в частности)?
Чтобы держать вопрос в фокусе: я не заинтересован в переходе на альтернативные реализации libstdc++, но я могу использовать Clang вместо GCC, если это поможет.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -using-stl
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»