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 tamEnBytes, 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)8 / 1024);
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 (" << (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...