에서 나는 할당있어 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 사용.
컴파일러에 어떤 이유로 메모리가 부족하여 컴파일러의 버그 일 수 있습니다. 나는 그것을 업데이트 할 것이다. 4.8.3은 2 살 이상입니다. – molbdnilo
''-ftrack-macro-expansion = 0''' 컴파일러 옵션을 사용해보십시오. 도움이된다면 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56746 – Grisha
@molbdnilo의 영향을받을 것입니다. gcc 5.3.0으로 다시 시도해 보았습니다. 컴파일 시간이 15 초 정도 더 걸리지 만 여전히 같은 오류가 발생합니다. – qwr