Programación General > C/C++

 Error en el Bus!!

<< < (2/3) > >>

m0skit0:
En teoría el máximo son 4 GiB, pero obviamente el sistema no da para tanto. Ten en cuenta que estás multiplicando siempre por 4, y los números que manejas son muy grandes. Un ordenador común no puede resolver tu problema, aunque no veo la necesidad de reservar tal cantidad ingente de memoria.

PD: es "mayor", no "mallor"  :P

skymir:
Lo de reservar esa cantidad de memoria es porque tengo que generar 2^k palabras de tamaño n, es decir de n bits cada una y necesito tenerlas todas a mano durante la ejecucion del programa. Había probado ha guardarlas todas en un fichero pero esto hacía al programa muy lento y por eso opte por la opción de guardarlas en memoria.

m0skit0:
Pues me temo que tu ordenador no es suficiente, como te digo. La memoria es limitada.

punteroNULO:

--- Cita de: "skymir" ---Lo de reservar esa cantidad de memoria es porque tengo que generar 2^k palabras de tamaño n, es decir de n bits cada una y necesito tenerlas todas a mano durante la ejecucion del programa. Había probado ha guardarlas todas en un fichero pero esto hacía al programa muy lento y por eso opte por la opción de guardarlas en memoria.
--- Fin de la cita ---

Supongamos n=8 y k=10. Deberías reservar: 2^10 * 8 = 8192 bits = 1024 bytes.

Pero en realidad estas reservando (suponemos tamaño int = 4 bytes):

--- Código: C ---buffer=(int *)malloc((int)pot*n*sizeof(int));  2^10 * 8 * 4 = 32768 bytes (¡32 veces más de lo necesario!).

Lo primero que debes hacer es averiguar cuantos bytes te hacen falta para almacenar una "palabra de n bits" y luego reservar la memoria necesaria.

skymir:
Comprendo lo que me dices, pero tu estas suponiendo que trabaje con las palabras a nivel de bits, y lo que yo estoy haciendo es que cada 4 posiciónes de memoria sea un bit debido a que uso variable tipo int, es decir imaginemos que tal como tu has supuesto n=8 y K=10, entonces por ejemplo si guardo cada una de las palabras en un array tipo int, cada posicion del array sería para mi un bit con lo que debería de tener arrays de tipo int de tamaño 2^10*n que traducido a memoria seria una reserva de 2^10*n*sizeof(int).

 Ya se que de esta forma estoy despreciando una enorme cantidad de memoria pero para la funcion que tiene que realizar el programa me vale este metodo ya que los K a tratar no serían muy elevados.
 El fallo que tengo que resolver es el de porque cuando intento reservar un tamaño de memoria concreto el programa no es capaz de hacerlo; cosa evidente debido al limite de memoria que pueda tener el ordenador, y cuando intento reservar un tamaño mayor que el anterior si es capaz de hacerlo y mas adelante me salta un fallo de segmentacion.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa