Namespaces
Variants

memalignment

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

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

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

フリースタンディング実装は freestanding implementation memalignment を提供する必要があります。

目次

パラメータ

p - クエリのアライメントへのポインタ

戻り値

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

注記

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

  • nullポインタは整数にキャストされると 0 となります,
  • ポインタ値は仮想アドレスの数値に直接キャストされ, そして
  • size_t uintptr_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)

関連項目

アライメントされたメモリを割り当てる
(関数)
以前に割り当てられたサイズ指定およびアライメントされたメモリを解放する
(関数)