Я пробую Intel MKL, и похоже, что у них есть собственное управление памятью (в стиле C).
Они предлагают использовать их пары MKL_malloc / MKL_free для векторов и матриц, и я не знаю, что является хорошим способом справиться с этим. Одной из причин этого является то, что для выравнивания памяти рекомендуется не менее 16 байт, и в этих подпрограммах это указывается явно.
Я привык полагаться на auto_ptr и boost :: smart_ptr, чтобы забыть об очистке памяти.
Как я могу написать безопасную для исключений программу с управлением памятью MKL или я должен просто использовать обычный auto_ptr и не беспокоиться?
Заранее спасибо.
EDIT
http://software.intel.com/sites/products/documentation/hpc/mkl/win/index.htm
эта ссылка может объяснить, почему я поднял вопрос
UPDATE
Я использовал идею из ответа ниже для распределителя. Вот что у меня сейчас:
template <typename T, size_t TALIGN=16, size_t TBLOCK=4>
class aligned_allocator : public std::allocator<T>
{
public:
pointer allocate(size_type n, const void *hint)
{
pointer p = NULL;
size_t count = sizeof(T) * n;
size_t count_left = count % TBLOCK;
if( count_left != 0 ) count += TBLOCK - count_left;
if ( !hint ) p = reinterpret_cast<pointer>(MKL_malloc (count,TALIGN));
else p = reinterpret_cast<pointer>(MKL_realloc((void*)hint,count,TALIGN));
return p;
}
void deallocate(pointer p, size_type n){ MKL_free(p); }
};
Если у кого-то есть какие-либо предложения, не стесняйтесь, чтобы сделать это лучше.