名前空間
変種
操作

memalignment

From cppreference.com
< c‎ | program
ヘッダー <stdlib.h> で定義
size_t memalignment( const void *p );
(C23以降)

指定されたアドレスが満たす最大のアライメントを返します。戻り値は、実装がサポートする任意のアライメント値よりも大きくなる可能性があります。p がヌルポインタ値の場合、ポインタがいかなる型のオブジェクトにもアクセスするために使用できないことを示すために 0 が返されます。

戻り値が alignof(T) 以上と比較される場合、型 T のアライメント要件はポインタによって満たされます。

スタンドアロン実装memalignment を提供する必要があります。

目次

[編集] パラメータ

p - アライメントを照会するポインタ

[編集] 戻り値

p のアライメント値。p がヌルポインタ値の場合は 0

[編集] 注記

以下が一般的なプラットフォームでは

  • ヌルポインタが整数 0 にキャストされ、
  • ポインタ値が仮想アドレスの数値に直接キャストされ、
  • size_tuintptr_t と同じ場合、

この関数は 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)

[編集] 関連項目

アラインされたメモリを割り当てる
(関数) [編集]
以前に割り当てられたサイズとアライメントのメモリを解放する
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)