Gibt es einen portablen Weg, der nur auf dem basiert, was der C99-Standard bietet, um die maximal erforderliche Ausrichtung zu finden, die für jeden Datentyp benötigt wird.So ermitteln Sie die maximal erforderliche Ausrichtung in C99
Wie maxalign_t
in C++ 11.
Was ich zur Zeit tun, ist das kleinste gemeinsame Vielfache der Berechnung (lcm
) der Ausrichtungen von int
, long int
, long long int
, double
, void *
und size_t
als Best-Effort-Weg, um die Ausrichtung zu bestimmen.
Update: Ich brauche dies zur Zeit für einen Wrapper um malloc
Implementierung, die Metadaten zu Beginn des Blockes des Speichers speichert und gibt einen Zeiger mit einer höheren Adresse als das, was malloc
zurückgekehrt ist.
Traurig, das zu hören. Ich werde bewerten, ob es möglich ist, zu C11 zu wechseln, ansonsten benutze intmax_t. – FSMaxB
Um noch paranoider zu sein, können Sie die Ausrichtungsanforderung 'intmax_t' oder' long double' verwenden, je nachdem, welcher Wert größer ist. –
@SteveSummit: Nicht vergessen 'void *'. Ein 128-Bit-Zeigertyp könnte Informationen über die Basisadresse, die Größe und den Versatz kombinieren, wodurch fehlerhafte Zeigermanipulationen viel effektiver gefangen werden können, als dies mit einfachen linearen Zeigern möglich wäre. – supercat