Question

Dans Visual C ++, j'essaie d'allouer dynamiquement de la mémoire qui est alignée de sorte que je peux utiliser des fonctions SSE2 16 octets qui nécessitent un alignement de mémoire. En ce moment, voilà comment j'allouer la mémoire:

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

Je sais que je peux utiliser _aligned_malloc pour allouer de la mémoire aligné, mais sera cette cause un problème avec Boostez il essaie de libérer ma mémoire? Ce sont les utilisations de boost de code pour libérer la mémoire:

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;
}

Mémoire free'd par suppression doit être attribuée à nouveau, non? Toute astuce sur la façon dont je peux contourner cela?

Était-ce utile?

La solution

boost::shared_array a un constructeur qui prend un deleter comme un second argument pour être utilisé à la place de delete[] par défaut.

Cela signifie que vous pourriez être en mesure de passer l'adresse d'une fonction de désaffectation appropriée comme ça.

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

Références: Boost.SharedArray

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top