2017-01-11 3 views
1

Здесь я выделяющие 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 ГБ.

+2

По какой-то причине у компилятора заканчивается память, поэтому, возможно, это ошибка в компиляторе. Я бы обновил его; 4.8.3 больше двух лет. – molbdnilo

+0

Попробуйте использовать опцию '' '-ftrack-macro-expand = 0'''. Если это помогает, на вас, вероятно, повлияет https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56746 – Grisha

+0

@molbdnilo Я попробовал еще раз с gcc 5.3.0. Компиляция занимает около 15 секунд дольше, но я все равно получаю ту же ошибку. – qwr

ответ

Смежные вопросы