Eh bien, il y a deux tailles ici. Le vector
lui-même n'est généralement pas plus d'un pointeur ou deux à la mémoire allouée, et les entiers non signés gardant la trace de la taille et de la capacité. Il y a aussi la mémoire allouée elle-même, ce que je pense que vous voulez.
Ce que vous voulez faire est de faire un allocateur personnalisé que le vector
utilisera. Quand vient le temps, il utilisera votre allocateur et vous pouvez avoir vos propres fonctionnalités spéciales. Je ne reprendrai pas le full details d'un allocateur, mais les détails:
template <typename T>
struct aligned_allocator
{
// ...
pointer allocate(size_type pCount, const_pointer = 0)
{
pointer mem = 0;
if (posix_memalign(&mem, YourAlignment, sizeof(T) * pCount) != 0)
{
throw std::bad_alloc(); // or something
}
return mem;
}
void deallocate(pointer pPtr, size_type)
{
free(pPtr);
}
// ...
};
Et vous voulez l'utiliser comme:
typedef std::vector<T, aligned_allocator<T> > aligned_T_vector;
aligned_T_vector vec;
vec.push_back(/* ... */); // array is aligned
Mais pour réitérer le premier point, la taille d'un vector
est la même quel que soit le nombre d'éléments qu'il contient, car il ne pointe que vers un tampon. Seule la taille de ce tampon change.