Namensräume
Varianten
Aktionen

memalignment

Von cppreference.com
Definiert im Header <stdlib.h>
size_t memalignment( const void *p );
(seit C23)

Gibt die maximale Ausrichtung zurück, die von der angegebenen Adresse unterstützt wird. Der Rückgabewert kann größer sein als jeder von der Implementierung unterstützte Ausrichtungswert. Wenn p ein Nullzeigerwert ist, wird 0 zurückgegeben, um anzuzeigen, dass der Zeiger nicht zum Zugriff auf ein Objekt eines beliebigen Typs verwendet werden kann.

Wenn der Rückgabewert größer oder gleich alignof(T) ist, wird die Ausrichtungsanforderung für den Typ T vom Zeiger erfüllt.

Eine freelance Implementierung muss memalignment bereitstellen.

Inhalt

[bearbeiten] Parameter

p - Zeiger, dessen Ausrichtung abgefragt werden soll

[bearbeiten] Rückgabewert

Der Ausrichtungswert von p oder 0, wenn p ein Nullzeigerwert ist.

[bearbeiten] Anmerkungen

Auf gängigen Plattformen, wo

  • Nullzeiger in Ganzzahlen umgewandelt werden 0,
  • Zeigerwerte direkt in die numerischen Werte virtueller Adressen umgewandelt werden und
  • size_t dasselbe wie uintptr_t ist,

kann diese Funktion als return (size_t)p & -(size_t)p; implementiert werden.

[bearbeiten] Beispiel

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    alignas(128) int i = 0;
    printf("%zu\n%zu\n", memalignment(nullptr), memalignment(&i));
}

Mögliche Ausgabe

0
128

[bearbeiten] Referenzen

  • C23-Standard (ISO/IEC 9899:2024)
  • 7.24.9.1 Die Funktion memalignment (S. 374)

[bearbeiten] Siehe auch

alloziert ausgerichteten Speicher
(Funktion) [bearbeiten]
dealloziert zuvor allozierten Speicher mit Größe und Ausrichtung
(Funktion) [bearbeiten]