memalignment
Von cppreference.com
< c | Programmierung
| 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
Führen Sie diesen Code aus
#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
| (C11) |
alloziert ausgerichteten Speicher (Funktion) |
| (C23) |
dealloziert zuvor allozierten Speicher mit Größe und Ausrichtung (Funktion) |