Dynamique aligné allocation de la mémoire en C++11

posix_memalign et _aligned_malloc sur Windows permettant d'allouer dynamiquement un alignées partie de la mémoire. Est-il rien de semblable dans C++11? Autant que je sache, le alignas mot-clé ne fonctionne qu'avec allouée statiquement objets.

  • Par aligné voulez-vous dire séquentielle ? Si oui, la mémoire allouée avec la combinaison de new opérateur et [] dynamique est aligné.
  • Aligné est en quelque sorte l'opposé de la séquentiel...
  • Je ne dirais pas "en face". Plus comme "orthogonale"?
  • Par alignés je veux dire que l'adresse modulo la valeur spécifiée est de zéro. Par exemple l'appel posix_memalign(&ptr, 32, 1000) garantit que l'adresse retournée dans le ptr est divisible par 32. J'ai besoin de ça pour l'allocation des objets à la ligne de cache limites pour éviter les faux partage.
  • J'ai peur qu'il n'y a pas de standard C++ allocateur de soutien arbitraire des alignements. Vous devez aller pour plate-forme spécifique de la répartition de l'Api. Mais cela ne devrait pas être un problème si vous l'utilisez en combinaison avec le constructeur/destructeur-sur-arbitraire-mémoire de l'exemple que je vous ai donné.
  • Généralement, l'alignement est utilisé pour faire correspondre les exigences matérielles. Cela signifie que les bits de poids faibles du pointeur sont tous 0. L'alignement de 64 octets 256 octets, 4KiBytes, ou 64KiB octets n'est pas rare.
  • C++17 ajoutera la possibilité de spécifier des "personnalisé" /sur-alignement pour les objets alloués dynamiquement: open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3396.htm Cette proposition mentionnée dans la réponse sommet a été accepté dans le prochain Standard.

InformationsquelleAutor user882903 | 2011-08-07