memalignment
From cppreference.com
| ヘッダー <stdlib.h> で定義 |
||
| size_t memalignment( const void *p ); |
(C23以降) | |
指定されたアドレスが満たす最大のアライメントを返します。戻り値は、実装がサポートする任意のアライメント値よりも大きくなる可能性があります。p がヌルポインタ値の場合、ポインタがいかなる型のオブジェクトにもアクセスするために使用できないことを示すために 0 が返されます。
戻り値が alignof(T) 以上と比較される場合、型 T のアライメント要件はポインタによって満たされます。
スタンドアロン実装は memalignment を提供する必要があります。
目次 |
[編集] パラメータ
| p | - | アライメントを照会するポインタ |
[編集] 戻り値
p のアライメント値。p がヌルポインタ値の場合は 0。
[編集] 注記
以下が一般的なプラットフォームでは
この関数は return (size_t)p & -(size_t)p;として実装できます。
[編集] 例
このコードを実行
#include <stdio.h> #include <stdlib.h> int main() { alignas(128) int i = 0; printf("%zu\n%zu\n", memalignment(nullptr), memalignment(&i)); }
実行結果の例
0 128
[編集] 参考文献
- C23標準 (ISO/IEC 9899:2024)
- 7.24.9.1 memalignment 関数 (p: 374)
[編集] 関連項目
| (C11) |
アラインされたメモリを割り当てる (関数) |
| (C23) |
以前に割り当てられたサイズとアライメントのメモリを解放する (関数) |