boost :: shared_array и выровненное распределение памяти - PullRequest
0 голосов
/ 22 октября 2010

В Visual C ++ я пытаюсь динамически выделить некоторую память, которая выровнена по 16 байтов, чтобы я мог использовать функции SSE2, которые требуют выравнивания памяти.Прямо сейчас вот как я распределяю память:

boost::shared_array aData(new unsigned char[GetSomeSizeToAllocate()]);

Я знаю, что могу использовать _aligned_malloc для выделения выровненной памяти, но это вызовет проблему с повышением, когда он попытается освободить мойобъем памяти?Это расширение кода, используемое для освобождения памяти:

<pre> template inline void checked_array_delete(T * x) { typedef char type_must_be_complete[ sizeof(T)? 1: -1 ]; (void) sizeof(type_must_be_complete); delete [] x; }

Свободная память при удалении должна быть выделена новой, верно?Любой совет, как я могу обойти это?

1 Ответ

1 голос
/ 22 октября 2010

boost::shared_array имеет конструктор, который принимает в качестве второго аргумента средство удаления вместо значения по умолчанию delete[].

Это означает, что вы можете передать адрес подходящей функции освобождения, какчто.

boost::shared_array<X> array(allocate_x(100), &deallocate_x);  

Ссылки: Boost.SharedArray

...