C++Allineamento


introduzione

Tutti i tipi in C ++ hanno un allineamento. Questa è una restrizione sull'indirizzo di memoria che gli oggetti di quel tipo possono essere creati all'interno. Un indirizzo di memoria è valido per la creazione di un oggetto se la divisione di quell'indirizzo tramite l'allineamento dell'oggetto è un numero intero.

Gli allineamenti di tipo sono sempre una potenza di due (incluso 1).

Osservazioni

Lo standard garantisce quanto segue:

  • Il requisito di allineamento di un tipo è un divisore delle sue dimensioni. Ad esempio, una classe con dimensione 16 byte potrebbe avere un allineamento di 1, 2, 4, 8 o 16, ma non 32. (Se i membri di una classe hanno solo 14 byte di dimensione, la classe deve avere un requisito di allineamento di 8, il compilatore inserirà 2 byte di riempimento per rendere la dimensione della classe uguale a 16.)
  • Le versioni firmate e non firmate di un tipo intero hanno lo stesso requisito di allineamento.
  • Un puntatore a void ha lo stesso requisito di allineamento di un puntatore al char .
  • Le versioni cv-qualificate e cv-non qualificate di un tipo hanno lo stesso requisito di allineamento.

Si noti che mentre l'allineamento esiste in C ++ 03, non è stato fino a C ++ 11 che è diventato possibile interrogare l'allineamento (usando alignof ) e l'allineamento di controllo (usando alignas ).

Allineamento Esempi correlati