Je suis surcharger operator new
, mais j'ai récemment frappé un problème avec l'alignement. En gros, j'ai une classe IBase
qui fournit operator new
et delete
dans tous les requis variantes. Toutes les classes dérivent d' IBase
, et donc également utiliser l'outil de allocateurs.
Le problème que je me pose maintenant, c'est que j'ai un enfant Foo
qui doit être de 16 octets alignés, tandis que tous les autres sont beaux lorsqu'ils sont alignés à 8 octets. Mon allocateur de mémoire cependant aligne 8-les limites d'octets que par défaut, de sorte que maintenant le code en IBase::operator new
renvoie un inutilisables morceau de mémoire. Comment est-ce censé être résolu correctement?
Je peux simplement de la force de toutes les allocations de 16 octets, qui fonctionnera bien jusqu'à 32 octets aligné type pop-up. Déterminer l'alignement à l'intérieur d' operator new
ne semble pas être trivial (puis-je faire un appel de fonction virtuelle là pour obtenir l'alignement?) Quelle est la méthode recommandée pour gérer cela?
Je connais malloc
est censé renvoyer un morceau de la mémoire qui est correctement alignés pour tout, malheureusement, ce "tout" ne comprend pas l'ESS types et je voudrais vraiment obtenir ce travail sans demander à l'utilisateur de se rappeler le type a qui l'alignement.