重複の可能性:
size_tとintptr_t
私のコードのいくつかはポインターを扱い、ポインターを処理する必要がuintptr_t
あるため、入力として受け取ります。
整数でも同じことをしなければならないので、そのコードを再利用したいと思います。
size_t
と同じですかuintptr_t
?uintptr_t
に置き換えるだけで、実装を変更して、ポインターと整数の両方に同じコードを使用できますsize_t
か?
重複の可能性:
size_tとintptr_t
私のコードのいくつかはポインターを扱い、ポインターを処理する必要がuintptr_t
あるため、入力として受け取ります。
整数でも同じことをしなければならないので、そのコードを再利用したいと思います。
size_t
と同じですかuintptr_t
?uintptr_t
に置き換えるだけで、実装を変更して、ポインターと整数の両方に同じコードを使用できますsize_t
か?
size_t
可能な限り最大のオブジェクトのサイズを含めるのに十分な大きさである必要があります。 ポインタを含めるのにuintptr_t
十分な大きさである必要があり
ます。これを考えると、 (可能な限り最大のオブジェクトのすべてのバイトがアドレス可能でなければならないため)多かれ少なかれ保証されますが、それ以上では
ありません。線形アドレス指定のマシンでは、おそらく同じサイズになります。一方、セグメント化されたアーキテクチャでは、オブジェクトは単一のセグメントに存在する必要があるため、通常はより大きくなりますが、ポインタはすべてのメモリをアドレス指定できる必要があります。sizeof(uintptr_t) >= sizeof(size_t)
uintptr_t
size_t
それは実装に依存します(そしてそれはプロセッサ、ABI、コンパイラ、標準ライブラリを含みます)。;size_t
と同じであるという保証はありません。uintptr_t
ただし、それが発生する可能性があります(32ビットのLinux x86またはARMでは、どちらも32ビットの符号なし整数です)。
また、の目的はsize_t
サイズ(特に割り当てられたメモリチャンク)であり、の目的はuintptr_t
ポインタと同じビットサイズの符号なし整数です。
コンパイラが異なれば、結果も異なります。それらを同じにしたい場合は、コンパイラが32ビットLinux x86またはARMに設定されていることを確認する必要があります。そうすれば、正しく動作します。