Здесь я выделяющие 10^9 бит:г ++ из памяти выделяют на станд :: BITSET
#include <bitset>
#include <iostream>
const int N = 1000000000;
std::bitset<N> b;
int main()
{
std::cout << sizeof(b) << std::endl;
}
я cc1plus.exe: out of memory allocating 268439551 bytes
.
Но когда я
#include <bitset>
#include <iostream>
const int N = 1000000000;
int l[N/32];
int main()
{
std::cout << sizeof(l) << std::endl;
}
В 125000000 байт (125 MB) выделяются штраф. Если я изменю N
на разную мощность 10, я вижу, что и sizeof
одинаковы. Я даже не вижу, откуда берется ограничение на байк 268439551, так как это 268,4 МБ, и у меня около 4 ГБ оперативной памяти. Даже в 32-битной системе ~ 200 МБ не должно вызывать проблемы, и каким-то образом достигается ограничение байта. Что вызывает здесь проблему?
Использование gcc 4.8.3 для Windows 8.1 с оперативной памятью 8 ГБ.
По какой-то причине у компилятора заканчивается память, поэтому, возможно, это ошибка в компиляторе. Я бы обновил его; 4.8.3 больше двух лет. – molbdnilo
Попробуйте использовать опцию '' '-ftrack-macro-expand = 0'''. Если это помогает, на вас, вероятно, повлияет https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56746 – Grisha
@molbdnilo Я попробовал еще раз с gcc 5.3.0. Компиляция занимает около 15 секунд дольше, но я все равно получаю ту же ошибку. – qwr