2017-01-11 4 views
1

에서 나는 할당있어 10^9 비트 :g ++ 표준에 대한 할당 메모리 : 여기에 비트 세트

#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; 
} 

을 수행 할 때

그러나 125,000,000 바이트 (1백25메가바이트)의 벌금을 할당됩니다. 내가 N을 10의 다른 힘으로 변경하면 모두 sizeof이 같은 것을 볼 수 있습니다. 268.49551 바이트 제한이 어디에서오고 있는지 알지 못합니다. 268.4MB이고 약 4GB RAM이 무료입니다. 심지어 32 비트 시스템에서 ~ 200 MB는 문제를 야기해서는 안되며, 어쨌든 바이트 제한에 도달합니다. 여기서 문제의 원인은 무엇입니까?

8GB RAM이 장착 된 Windows 8.1에서 gcc 4.8.3 사용.

+2

컴파일러에 어떤 이유로 메모리가 부족하여 컴파일러의 버그 일 수 있습니다. 나는 그것을 업데이트 할 것이다. 4.8.3은 2 살 이상입니다. – molbdnilo

+0

''-ftrack-macro-expansion = 0''' 컴파일러 옵션을 사용해보십시오. 도움이된다면 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56746 – Grisha

+0

@molbdnilo의 영향을받을 것입니다. gcc 5.3.0으로 다시 시도해 보았습니다. 컴파일 시간이 15 초 정도 더 걸리지 만 여전히 같은 오류가 발생합니다. – qwr

답변