Esiste un modo portatile che fa affidamento solo su ciò che lo standard C99 fornisce per individuare l'allineamento massimo richiesto necessario per qualsiasi tipo di dati.Come determinare l'allineamento massimo richiesto in C99
Come maxalign_t
in C++ 11.
Quello che sto facendo attualmente sta calcolando il minimo comune multiplo (lcm
) degli allineamenti di int
, long int
, long long int
, double
, void *
e size_t
come modo migliore sforzo di determinare l'allineamento.
Aggiornamento: Attualmente bisogno di questo per l'attuazione di un wrapper malloc
che memorizza i metadati all'inizio del blocco di memoria e restituisce un puntatore con un indirizzo superiore a quello che malloc
è tornato.
Triste per sentirlo. Valuterò se è possibile passare a C11 altrimenti usare intmax_t. – FSMaxB
Per essere ancora più paranoico è possibile utilizzare il requisito di allineamento di 'intmax_t' o' long double', a seconda di quale sia maggiore. –
@SteveSummit: non dimenticare 'void *'. Un tipo di puntatore a 128 bit potrebbe combinare le informazioni sull'indirizzo di base, la dimensione e l'offset, consentendo di manipolare erroneamente il puntatore in modo molto più efficace di quanto sarebbe possibile utilizzando semplici puntatori lineari. – supercat