Pues yo vi un inconveniente muy gordo, usa fuerza bruta y empieza desde 1 y el tamaño maximo de un long long int es inmenso y podria ser eterno dependiendo de la memoria disponible. Para hacer unas pruebas y aligerar lo maximo el proceso hice esto:
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;
unsigned long long int tamEnBytes;
double tamEnKb, tamEnMb, tamEnGb;
int nCeros=0;
// Voy incrementando exponencialmente 10^nDigitos para avanzar mas rapido
// hasta un valor que de null al reservar
do{
p= new (std::nothrow) long long int[n];
if(p == NULL){
nCeros++;
n = std::numeric_limits<long long int>::max() / (10*nCeros);
}
}while(n > 0 && p == NULL);
//Una vez salga libero la memoria
if(p != 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::nothrow) long long int[n];
if(p != NULL)
delete [] p;
}while(p != NULL && n < std::numeric_limits<long long int>::max());
n--;
tamEnBytes = sizeof(long long int) * n;
tamEnKb = tamEnBytes / (double)1024 * n;
tamEnMb = tamEnKb / 1024;
tamEnGb = tamEnMb / 1024;
cout << endl << "-----------------------" << endl;
cout << "Numero maximo de elementos para los que se pudo obtener memoria es: " << n << endl;
cout << "Memoria total consumida por el array: " << endl <<
tamEnBytes << " bytes o " << endl <<
tamEnKb << " kb o " << endl <<
tamEnMb << " Mb o " << endl <<
tamEnGb << " Gb" << endl << endl;
}
cout << "Presiona una tecla para salir" << endl;
cin.get();
return 0;
}
y me da este resultado:
Cita: -----------------------
Numero maximo de elementos para los que se pudo obtener memoria es: 922337203716897579
Memoria total consumida por el array:
7378697629735180632 bytes o
6.64614e+33 kb o
6.49037e+30 Mb o
6.33825e+27 Gb
Presiona una tecla para salir
Muchos Gigas ¿no? ¿que hago mal para que me de esas burradas? solo tengo 1 giga de ram ¿de donde se saca tanto? Eso no lo tengo ni con el disco duro jajaja.
A ver si veis el fallo aunque pienso que pude ser algo relacionado con desbordamientos de variables o cosas asi pero no lo se seguro ni como solucionarlo.