Ver Mensaje Individual
  #6 (permalink)  
Antiguo 13/03/2015, 18:18
aguml
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: Respuesta inesperada en asignación de memoria

Vale, vi algun fallo en los calculos pero aun asi lo veo una burrada. Asi quedó ahora:
Código PHP:
#include <iostream>
#include <new>
#include <math>
using namespace std;

int main ()
{
   
unsigned long long int n std::numeric_limits<long long int>::max();
   
long long int *p;
   
double tamEnBytestamEnKbtamEnMbtamEnGb;
   
int nCeros=0;

   
// Voy incrementando exponencialmente 10^nDigitos para avanzar mas rapido
   // hasta un valor que de null al reservar
   
do{
      
p= new (std::nothrowlong long int[n];
      if(
== NULL){
         
nCeros++;
         
std::numeric_limits<long long int>::max() / (10 nCeros);
      }
   }while(
&& == NULL);

   
//Una vez salga libero la memoria
   
if(!= NULL)
   {
      
delete [] p;

      
// Una vez salga del bucle anterior tendré un valor mayor al que puedo usar
      // asi que lo voy decrementando hasta encontrar el valor valido maximo
      
do{
         
n++;
         
p= new (std::nothrowlong long int[n];
         if(
!= NULL)
            
delete [] p;
      }while(
!= NULL && std::numeric_limits<long long int>::max());

      
n--;
      
tamEnBytes sizeof(long long int) * n;
      
tamEnKb tamEnBytes * ((double)1024);
      
tamEnMb tamEnKb 1024;
      
tamEnGb tamEnMb 1024;
      
cout << endl << "-----------------------" << endl;
      
cout << "Numero maximo de elementos para los que se pudo obtener memoria es: " << << endl;
      
cout << "Memoria total consumida por el array: " << endl <<
      
tamEnBytes << " bytes (" << (unsigned long long int)tamEnBytes << " bytes) o " << endl <<
      
tamEnKb << " Kb (" << (unsigned long long int)tamEnKb << " Kb) o " << endl <<
      
tamEnMb << " Mb (" << (unsigned long long int)tamEnMb << " Mb) o " << endl <<
      
tamEnGb << " Gb (" << (unsigned long long int)tamEnGb << " Gb) o " << endl << endl;
   }
   
cout << "Presiona una tecla para salir" << endl;
   
cin.get();
   return 
0;

Cita:
-----------------------
Numero maximo de elementos para los que se pudo obtener memoria es: 922337203716897579
Memoria total consumida por el array:
7.3787e+18 bytes o
5.76461e+16 kb o
5.6295e+13 Mb o
5.49756e+10 Gb

Presiona una tecla para salir
Me sigue pareciendo una burrada. A ver si alguien lo aclara...

Última edición por aguml; 13/03/2015 a las 18:43