2017-01-11 1 views
1

Hier bin ich die Zuteilung 10^9 Bits:g ++ aus dem Speicher für std :: Zuteilung bitset

#include <bitset> 
#include <iostream> 

const int N = 1000000000; 
std::bitset<N> b; 

int main() 
{ 
    std::cout << sizeof(b) << std::endl; 
} 

ich cc1plus.exe: out of memory allocating 268439551 bytes.

Aber wenn ich

#include <bitset> 
#include <iostream> 

const int N = 1000000000; 
int l[N/32]; 

int main() 
{ 
    std::cout << sizeof(l) << std::endl; 
} 

Die 125.000.000 Bytes (125 MB) zugeordnet sind, in Ordnung. Wenn ich N zu einer anderen Macht von 10 ändere, sehe ich beide sizeof sind die selben. Ich sehe nicht einmal, wo das 268439551-Byte-Limit herkommt, da das 268,4 MB ist und ich ungefähr 4 GB RAM frei habe. Selbst auf einem 32-Bit-System sollte ~ 200 MB kein Problem verursachen, und irgendwie ist das Byte-Limit erreicht. Was verursacht das Problem hier?

Verwenden von gcc 4.8.3 unter Windows 8.1 mit 8 GB RAM.

+2

Der Compiler hat aus irgendeinem Grund nicht genügend Speicher, also ist es möglicherweise ein Fehler im Compiler. Ich würde es aktualisieren; 4.8.3 ist älter als zwei Jahre. – molbdnilo

+0

Probieren Sie '' '-ftrack-macro-expansion = 0''' Compiler-Option. Wenn es hilft, dann sind Sie wahrscheinlich von https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56746 betroffen. – Grisha

+0

@molbdnilo Ich habe es erneut mit gcc 5.3.0 versucht. Die Kompilierung dauert etwa 15 Sekunden länger, aber ich bekomme immer noch den gleichen Fehler. – qwr

Antwort

Verwandte Themen