c++ - tipos - ¿Cuál es el costo general de un vector vacío?
tipos de arreglos en c++ (6)
Depende de la implementación, probablemente un puntero y dos enteros para el tamaño y la capacidad actuales.
¿Cuál es la sobrecarga de memoria de tener un vector vacío vs tener un puntero a un vector?
Opción A:
std::vector<int> v;
Opción B:
std::vector<int> *v = NULL;
Creo que la opción B toma 1 puntero de 32 bits (suponiendo 32 bits aquí) ¿Cuánta memoria ocupa la ''v'' vacía?
En Visual Studio Community 2017 (Versión 15.2), ejecutando este código:
#include <iostream>
#include <vector>
using namespace std;
void main()
{
vector<float> test;
vector<float>* test2 = &test;
cout << sizeof(test) << "/n";
cout << sizeof(test2) << "/n";
cout << "/n";
system("pause");
}
Corriendo en 32 bits (x86), obtengo 16 bytes para el vector y 4 bytes para el puntero del vector.
Corriendo en 64 bit (x64), obtengo 32 bytes para el vector y 8 bytes para el puntero del vector.
En cuanto a la pregunta como se hizo: depende de la implementación. Con MSVC 7.1 esto:
std:: cout << sizeof(std::vector<int>) << std::endl;
me da 16 (bytes). (3 punteros: comienzo, final y final de capacidad, más un asignador)
Sin embargo , debe tenerse en cuenta que el puntero-vector le da una mayor sobrecarga:
- en tiempo y espacio en el caso no vacío
- en complejidad en todos los casos.
Es completamente dependiente de la implementación y no debe suponer ni confiar en los detalles. Por lo que vale, son 20 bytes usando VC.
VS2005:
std::vector<int> *ptrToVec = new std::vector<int>();
std::vector<int> vecOfInt;
sizeof(ptrToVec) = 4
sizeof(vecOfInt) = 20
¡Gracias!
std::vector v;
toma sizeof(v)
espacio. Puede variar según la implementación, así que ejecútelo y descubra cuánto le cuesta.