Foros del Web » Programación para mayores de 30 ;) » C/C++ »

RAM allocation - Duda sobre tamaño maximo

Estas en el tema de RAM allocation - Duda sobre tamaño maximo en el foro de C/C++ en Foros del Web. Soy estudiante, no sean tan estrictos =7 Descripcion de programa Intentar llenar la mayor cantidad de ram posible. Objetivo Al consumir la mayor cantidad de ...
  #1 (permalink)  
Antiguo 30/03/2015, 05:15
cristiansc93
Invitado
 
Mensajes: n/a
Puntos:
RAM allocation - Duda sobre tamaño maximo

Soy estudiante, no sean tan estrictos =7
Descripcion de programa

Intentar llenar la mayor cantidad de ram posible.

Objetivo

Al consumir la mayor cantidad de ram posible, el sistema operativo cerrara o suspendera procesos innecesarios y recuperara cualquier posible escape de ram.

Problemas

Termina anormalmente debido al tamaño del array.

Observaciones.

Funciona con tamaños menores. Tal vez si considero 300 mb para win7 y los resto al tamaño del array funcione, pero quisiera evitar esta solucion.


Código C++:
Ver original
  1. #include <iostream>
  2. #include <new>
  3.  
  4. using namespace std;
  5.  
  6. //Determines the maximun size of memory.
  7. int maximum_size ()
  8. {
  9.     int n = 1;
  10.     int * p;
  11.    
  12.     do
  13.         {
  14.             p = new ( nothrow )   int[n];
  15.             n++;
  16.         }
  17.     while ( p != nullptr );
  18.    
  19.     delete[] p;
  20.    
  21.     return n;
  22. }//end of maximum_size
  23.  
  24.  
  25. int main ( void )
  26. {
  27.  
  28.     /*
  29.    
  30.    
  31.     Se declara una variable tipo entero para
  32.     guardar el tamaño del array.
  33.    
  34.     Se declara un puntero a un puntero a un flotante:
  35.    
  36.         *pointer  -->  *pointer  -->  float
  37.    
  38.    
  39.     */
  40.    
  41.     int size = maximum_size();
  42.    
  43.     float** MainArray = nullptr;
  44.     MainArray = new float*[size];
  45.    
  46.     cout << "Allocating..." << endl;
  47.    
  48.     for ( int i = 0 ; i < size ; i++ )
  49.         {
  50.             float* SubArray = nullptr;
  51.             SubArray = new float[size];
  52.            
  53.             for ( int j = 0 ; j < size ; j++ )
  54.                 {
  55.                     SubArray[j] = ( float ) j;
  56.                 }
  57.                
  58.             MainArray[i] = SubArray;
  59.         }
  60.        
  61.     cout << size << "M.B. Allocated!" << endl << endl;
  62.    
  63.     /*
  64.    
  65.    
  66.     La variable "MainArray" apunta a "SubArray" y
  67.     "SubArray" apunta a un valor flotante. Por lo
  68.     tanto, tenemos un Array bidimensional:
  69.    
  70.         *MainArray  -->  *SubArray  -->  Float  ==>  BidimensionalArray
  71.    
  72.     Después de alojar la memoria, la liberamos con
  73.     "delete[]", le proveemos una puntero a "delete[]"
  74.     y después asignamos el puntero como "nullptr" como en
  75.     el siguiente bloque de codigo.
  76.    
  77.    
  78.     */
  79.    
  80.     for ( int i = 0 ; i < size ; i++ )
  81.         {
  82.             delete[]  MainArray[i];
  83.             MainArray[i] = nullptr;
  84.         }
  85.        
  86.     delete[] MainArray;
  87.     MainArray = nullptr;
  88.     cout << "-----------------------------------" << endl;
  89.     cout << "Memory cleared!!" << endl;
  90.    
  91.     return 0;
  92.    
  93. }//end of main
  #2 (permalink)  
Antiguo 30/03/2015, 05:34
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: RAM allocation - Duda sobre tamaño maximo

Eres un pesado, ya te contestamos a esto en el hilo anterior... ¿será que no lees lo que escribimos? Y no, lo siento, no pongas que no seamos duros contigo cuando estás poniendo el mismo código que en el hilo anterior:

Código C++:
Ver original
  1. do
  2.         {
  3.             p = new ( nothrow )   int[n];
  4.             n++;
  5.         }
  6.     while ( p != nullptr );
  7.    
  8.     delete[] p;

el "new" reserva memoria... como puede reservarla se repite el bucle do-while, por lo que se vuelve a ejecutar el "new" (sin un delete previo, al hacer "new", "p" apuntará a la nueva reserva de memoria y se "olvidará" de la anterior, por lo que ya estás dejando lagunas de memoria)... cuando ya no puedes reservar más memoria sales del do-while y ejecutas el delete... pero claro, llegados a ese punto "p" apunta a null porque no se ha podido hacer la reserva de memoria y, en consecuencia, ese delete no hace absolutamente nada.

Al salir de la función tienes toda la memoria ocupada ya que no has liberado absolutamente nada... después intentas hacer operaciones que consumen más RAM y... ohhhh sorpresa, el programa falla porque no tiene RAM... ¿por qué sera? ah, si, quita, porque no has liberado la memoria que tenías reservada
  #3 (permalink)  
Antiguo 30/03/2015, 05:51
lareto
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: RAM allocation - Duda sobre tamaño maximo

Niño, por favor, no digas de dónde eres ni dónde estudias, que nos avergüenzas a todos.

Etiquetas: funcion, int, maximo, memoria, programa, ram, tamaño
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:23.