Ver Mensaje Individual
  #3 (permalink)  
Antiguo 16/02/2016, 03:56
dmorill
 
Fecha de Ingreso: junio-2014
Mensajes: 144
Antigüedad: 10 años, 5 meses
Puntos: 1
Respuesta: Quien tiene mayor capacidad vector o list

Gracias, lo entiendo, pero en teoría el list puede almacenar más pues, si el vector no encuentra un bloque de memoria suficientemente grande no pude aumentar de tamaño. Pero las list pueden meterse en "huecos" en la memoria, no en bloques.

He hecho esta prueba, uso visualStudio 2013 por eso el tamaño del int es de 2147483647.

Código C++:
Ver original
  1. #include <iostream>
  2. #include <vector>
  3. #include <list>
  4.  
  5. using namespace std;
  6.  
  7.  
  8. int main(){
  9.     int i,j;
  10.    
  11.     vector<int> vAux;
  12.     for (i = 0; i < 50; i++)vAux.push_back(i);
  13.     list<int> lAux;
  14.     for (i = 0; i < 50; i++)lAux.push_back(i);
  15.     i = 0;
  16.     j = 111222000;  //max 2147483647;
  17.     vector<vector<int>> v;
  18.     cout << "max size: " << v.max_size() << endl;
  19.     cout << "j.......: " << j << endl;
  20.     cout << "i.......: " << i << endl;
  21.  
  22.     for (i = 0; i < j; i++){
  23.         v.push_back(vAux);
  24.         if (i % 500000 == 0) cout << " i: " << i << endl;
  25.         if (i > 7500000 && i % 100000==0) cout << " ii: " << v.size() << endl;
  26.     }
  27.     cout << i << endl;
  28.  
  29.     cin.sync();
  30.     cin.get();
  31.     return 0;
  32. }

Y es muy raro, el maxi size (tengo 16 gigas de ram) es de 357.913.941 y el código falla cuando el vector tiene poco más de 7.900.000.

Otra cosa que no entiendo bien es porqué este resultado se altera si lo corro en debug, es decir falla a los 5 millones en debug no a los 7 millones como en release.

El problema no es que falte memoria creo, sino que el vector no aumenta más a pesar de que está dentro de sus capacidades.

Haciendo lo que me recomendó eferion hice esta prueba:

Código C++:
Ver original
  1. int main(){
  2.     int i, j;
  3.  
  4.     vector<int> vAux;
  5.     for (i = 0; i < 50; i++)vAux.push_back(i);
  6.     list<int> lAux;
  7.     for (i = 0; i < 50; i++)lAux.push_back(i);
  8.     i = 0;
  9.     j = 111222000;  //max 2147483647;
  10.     vector<vector<int>> v;
  11.     cout << "max size: " << v.max_size() << endl;
  12.     cout << "j.......: " << j << endl;
  13.     cout << "i.......: " << i << endl;
  14.     v.reserve(j);
  15.     for (i = 0; i < j; i++){
  16.         v.push_back(vAux);
  17.         if (i % 500000 == 0) cout << " i: " << i << endl;
  18.         if (i > 7500000 && i % 100000 == 0) cout << " ii: " << v.size() << endl;
  19.     }
  20.     cout << i << endl;
  21.  
  22.     cin.sync();
  23.     cin.get();
  24.     return 0;
  25. }

Y el problema es que el vector es lo suficientemente grande pero para mi sorpresa da el mismo error de bad_alloc at memory location a pocos más de 3.500.000 menos que antes.

Qué es lo que pasa, no tiene sentido. En todo esto el proceso sólo usa casi 2 gb de memoria ram, y mi windows usa más o menos 4 para un total de 6 de mis 16gb. No creo que el problema sea de memoria.

Saludos,

Última edición por dmorill; 16/02/2016 a las 04:16 Razón: Más información.