ptrdiff_t

読み:ポインターディフ・アンダースコア・ティー
外語:ptrdiff_t 英語
品詞:名詞

C/C++で、ポインター同士の減算結果を表わす型。二つのポインター間の距離を表わす。

目次

C

#include <stddef.h>

定義は後述。

C++

#include <cstddef>

定義は後述。

printfのフォーマット文字列では、C99以降では長さとしてtを使う(例えば%td)。

ユーザー空間

gcc 4.4

Linuxのユーザー空間で、gcc 4.4の場合は、次のように定義されている。

/usr/lib/gcc/x86_64-linux-gnu/4.4/include/stddef.h

#define __PTRDIFF_TYPE__ long int
typedef __PTRDIFF_TYPE__ ptrdiff_t;

様々な環境に対応できるよう大量の#ifndefの中に埋もれているが、特に特殊な定義がない場合、x86の64ビットでは間接的にlong intつまりlongで定義されている。

Windows

Visual C++ 12.0では、stddef.h から呼び出される crtdefs.h で次のように定義されている。

#ifdef _WIN64
typedef __int64             ptrdiff_t;
#else  /* _WIN64 */
typedef _W64 int            ptrdiff_t;
#endif  /* _WIN64 */

つまり、32ビット環境なら32ビット長のint型、64ビット環境なら64ビット長の__int64型となる。

カーネル空間

FreeBSD

FreeBSDでは、次のように定義される。

stddef.h

typedef        __ptrdiff_t     ptrdiff_t;

64ビットのFreeBSD(x64用)では、sys/amd64/include/_types.h で次のように定義される。

typedef long                    __int64_t;
typedef __int64_t       __ptrdiff_t;            /* ptr1 - ptr2 */

32ビットのFreeBSD(x86用)では、sys/i386/include/_types.h で次のように定義される。

typedef int                     __int32_t;
typedef __int32_t       __ptrdiff_t;            /* ptr1 - ptr2 */

つまり、32ビット環境なら32ビット長のint型、64ビット環境なら64ビット長のlong型となる。

Linux

Linuxカーネルでは、次のようにして使う。

#incluce <linux/types.h>

定義は、/usr/src/linux-headers-2.6.XX-XX/include/linux/types.h などにある。

typedef __kernel_ptrdiff_t      ptrdiff_t;

__kernel_size_tの定義は環境ごとに様々であるが、代表的な環境(x86とARM)では次のようになっている。

x86の32ビットの場合、arch/x86/include/asm/posix_types_32.h で定義される。

typedef int             __kernel_ptrdiff_t;

x86の64ビットの場合、arch/x86/include/asm/posix_types_64.h で定義される。

typedef long            __kernel_ptrdiff_t;

ARMの32ビットの場合、arch/arm/include/asm/posix_types.h で定義される。

typedef int                     __kernel_ptrdiff_t;

概ね、32ビットならint、64ビットならlongで定義されている。その目的から、概ねアドレス長程度の長さが定義されると思われるが、但し符号付きである点に注意が必要である。

用語の所属
_t

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club