es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

‘std::bad_alloc’ se lanza cuando se intenta asignar un conjunto de más de 10^8 enteros.

Estoy usando el compilador g++ 9.2.0 con una memoria de 16 GB, en una computadora de 64 bits,

cuando estaba tratando de asignar un gran bloque de memoria en mi programa, me encontré con este error:

c++ terminado llamado después de arrojar una instancia de 'std::bad_alloc'

Un ejemplo mínimo se muestra a continuación:
“`c ++

<h1>include <bits/stdc++.h></h1>

using namespace std;
const int MAX<em>N = 1000000;
struct {
set<int> rels;
} arr[MAX</em>N];
int main() {
for(int i = 0; i < MAX_N; i++) {
for(int j = 0; j < 250; j++)
arr[i].rels.insert(j);
}
return 0;
}
“`

Sé que 250,000,000 enteros ocupan mucho espacio. Pero no se espera que sean mayores que 250000000*32/8/1024/1024 = 954 MB, que es solo una decimosexta parte de la memoria física de mi computadora.

¿Hay alguna forma de hacer que mi programa pueda asignar un espacio más grande, como 2 GB o más?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, existen algunas formas de hacer que tu programa pueda asignar un espacio mayor.

    1. Aumenta la cantidad de memoria disponible para tu programa aumentando la cantidad de RAM en tu ordenador.
    2. Utiliza un compilador de 64 bits en lugar de uno de 32 bits. Esto permitirá que tu programa acceda a más memoria.
    3. Usa un archivo de mapeo de memoria en lugar de asignar memoria directamente. Esto permitirá que tu programa acceda a más memoria que la disponible en RAM.
    4. Usa un asignador de memoria que esté optimizado para asignaciones grandes. Esto permitirá que tu programa acceda a más memoria que la disponible en RAM.
    5. Usa un lenguaje de programación diferente que sea más adecuado para asignaciones grandes. Por ejemplo, Java y C# tienen un mejor manejo de la memoria que C++.

Comments are closed.