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.
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
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
@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