Perché durante la compilazione di Sample 1
, viene utilizzata tutta la mia RAM e si arresta in modo anomalo sul computer, senza che compaiano le combinazioni Sample 2
senza farlo?Utilizzo estremo della memoria con matrici di grandi dimensioni di un oggetto
Esempio 1:
class Foo
{
int a = 0;
};
class Test
{
Foo foo[4000000] = {};
};
int main()
{
Test t;
}
Esempio 2:
class Foo
{
int a = 0;
};
int main()
{
Foo foo[4000000] = {};
}
Infine, non v'è alcun modo per fermare campione 1 da utilizzare tonnellate di RAM durante la compilazione? Sto usando gcc version 5.3.0
e ho compilato il precedente con -std=c++11
. Notare che class Test
dovrebbe richiedere solo 16 MB di memoria.
Per qualsiasi
'usa tutta la mia RAM e va in crash nel mio computer' Se GCC lo fa, è ovviamente un bug del compilatore. – user6412786
Affascinante. Immagino che gcc stia tentando di creare un costruttore per l'oggetto generando il codice per inizializzare ciascuna delle quattro milioni di istanze di 'Foo' nella classe' Test'. Non so perché gcc non può farlo nello stesso modo in cui lo fa nel secondo esempio. Post scriptum 'class Test 'dovrebbe richiedere 16 MB di memoria, 4 milioni * 4 byte per int. –
Non è eccessivamente irragionevole generare codice non ottimizzato e quindi ottimizzarlo. Sebbene, ovviamente, ciò produca risultati drammaticamente subottimali in questo caso. –