Istnieją dwa rozmiary tutaj. Samo vector
jest zwykle nie więcej niż wskaźnikiem lub dwoma do niektórych przydzielonych pamięci i liczb całkowitych bez znaku, śledząc rozmiar i pojemność. Jest też przydzielona sama pamięć, o której myślę, że chcesz.
Co chcesz zrobić, to zrobić niestandardowy przydział, którego użyje vector
. Kiedy nadejdzie czas, użyje twojego przydziału i będziesz mieć własną specjalną funkcjonalność. Nie będę się nad full details wystąpienia podzielnika, ale specyfika:
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);
}
// ...
};
A potem go używać jak:
typedef std::vector<T, aligned_allocator<T> > aligned_T_vector;
aligned_T_vector vec;
vec.push_back(/* ... */); // array is aligned
Ale powtórzyć pierwszy punkt, wielkości vector
jest taki sam, niezależnie od tego, ile elementów trzyma, ponieważ wskazuje tylko na bufor. Zmienia się tylko rozmiar tego bufora.