Ну, здесь два размера. Сам vector
обычно представляет собой не более чем указатель или два для некоторой выделенной памяти, а целые числа без знака, отслеживающие размер и емкость. Существует также выделенная память, которая, как я думаю, вам нужна.
Что вы хотите сделать, это сделать собственный распределитель, который будет использовать vector
. Когда придет время, он будет использовать ваш распределитель, и у вас могут быть свои собственные специальные функции. Я не пойду по full details из в распределителе, но специфика:
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);
}
// ...
};
И тогда вы бы использовать его как:
typedef std::vector<T, aligned_allocator<T> > aligned_T_vector;
aligned_T_vector vec;
vec.push_back(/* ... */); // array is aligned
Но повторить первую точку, размер vector
- это то же самое, независимо от того, сколько элементов оно удерживает, поскольку оно указывает только на буфер. Изменяется только размер этого буфера.