Я написал простую программу на C++ в моей Ubuntu сервера:Почему g ++ компилятор использует столько памяти?
test.cpp:
#include<iostream>
using namespace std;
int a[100*100*100*100*10];
int main() {
unsigned int count = 0;
for (int i = 0; i < 100*100*100*100*10; i++) {
if (i % 10000000 == 0) cout << i << endl;
a[i] = i;
count += i;
}
cout << count << endl;
}
и мой г ++ компилятор является:
[email protected]:~# g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
память моего сервера 64GB. , когда я запускаю g++ test.cpp
, для компиляции этого файла C++ требуется около 1 минуты. и пиковое использование g ++-прогресса составляет 5 ГБ памяти ....
Почему?
Кстати, когда я запускаю эту программу, ей нужно около 1 минуты, чтобы закончить. Я думаю, может быть, что-то не так с моей памятью. Это потому, что память слишком велика?
В качестве стороннего варианта я могу предложить 'const int BufferSize = 100 * 100 * 100 * 100 * 10;' вместо того, чтобы использовать тот же магический номер дважды – Sean
Я подозреваю, что stackoverflow.com не подходит для этого вопроса спросил, однако ... если вы измените размер своей константы, вы, скорее всего, увидите отличную производительность от компилятора.Вы не упомянули, какие флаги компилятора вы используете, но если выполняется какая-либо оптимизация, эта константа может быть огромной проблемой в качестве контрольной точки цикла (в то время как компилятор решает, должен ли он развернуть цикл). – mah
Компиляция заняла всего 2 секунды на виртуальной машине с 2 ГБ оперативной памяти. Конечно, я не могу запустить программу там, но если вам действительно нужна 1 минута, чтобы скомпилировать эту программу, я бы сказал, что есть что-то очень ужасное. Можете ли вы запустить быстрый hd perftest ('hdparm -t/dev/yourhd'), чтобы узнать, связано ли это с памятью или диском? И проверьте dmesg, возможно, ваш диск умирает от вас. – fvu