Index / Reload
上のプログラムの示唆するように、ポインタの減算結果を大小関係の比較に使おうとすると、sizeof(ptrdiff_t) が sizeof(intptr_t) よりも大きくならないと都合が悪いのです。OS/ドライバーや VM の実装でポインタの減算を直接使ってメモリ領域の幅を計算してしまいバグ混入というのを見たことがあります。ptrdiff_t を 64bit 整数にしてやれば解決するのですが、速度が遅くなるのと、sizeof(ptrdiff_t) == sizeof(intptr_t) に依存するプログラムがバグってしまうために大顰蹙を買うことになります...
「5. C 言語の ptrdiff_t 型は何ビットであるべきか」「本来符号付き 33 bit になる」と言ったところで、指すことの出来るアドレスのほうが32bitしかないのなら、どうしようもないですよね?Cは実用的な言語であるべきなのだから、結果を符号無し32bitにキャストしたものになる、でいいんじゃないでしょうか?
上のプログラムの示唆するように、ポインタの減算結果を大小関係の比較に使おうとすると、sizeof(ptrdiff_t) が sizeof(intptr_t) よりも大きくならないと都合が悪いのです。OS/ドライバーや VM の実装でポインタの減算を直接使ってメモリ領域の幅を計算してしまいバグ混入というのを見たことがあります。
ptrdiff_t を 64bit 整数にしてやれば解決するのですが、速度が遅くなるのと、sizeof(ptrdiff_t) == sizeof(intptr_t) に依存するプログラムがバグってしまうために大顰蹙を買うことになります...
「5. C 言語の ptrdiff_t 型は何ビットであるべきか」
「本来符号付き 33 bit になる」と言ったところで、指すことの出来るアドレスのほうが32bitしかないのなら、どうしようもないですよね?
Cは実用的な言語であるべきなのだから、結果を符号無し32bitにキャストしたものになる、でいいんじゃないでしょうか?