Aligné malloc en C++

J'ai une question sur le problème de 13,9 dans le livre, "fendre le codage interview".
La question est d'écrire une aligné alloc et une fonction qui prend en charge l'allocation de la mémoire, et dans sa réponse, le code est donné ci-dessous:

void *aligned_malloc(size_t required_bytes, size_t alignment) {
  void *p1;
  void **p2;
  int offset=alignment-1+sizeofvoid*);
  if((p1=(void*)malloc(required_bytes+offset))==NULL)
  return NULL;
  p2=(void**)(((size_t)(p1)+offset)&~(alignment-1));  //line 5
  p2[-1]=p1; //line 6
  return p2;
}

Je suis tellement confondue avec la ligne 5 et la ligne 6. Pourquoi dois-tu faire un "et" puisque vous avez déjà ajoutez un décalage de p1? et ce n'est [-1] signifie? Merci pour l'aide à l'avance.

C'est que le code exact du livre? Il ne manque plus à l'appel à malloc...
désolé, juste fixe

OriginalL'auteur Ming | 2012-09-20