他のヒント

size_tのは、(その名前が示すように)サイズを表すために使用されるタイプです。そのプラットフォーム(とさえ潜在的に実装)に依存する、とは、この目的のためだけに使用する必要があります。もちろん、サイズを表す、size_t型は、符号なしです。 malloc関数、はsizeof及び各種文字列操作機能を含む多くのSTDLIB関数は、データ型としてsize_tの使用。

int型はデフォルトで署名され、そのサイズもプラットフォームに依存しているにもかかわらず、それは最も近代的なマシン上の固定32ビットになります(とsize_tのは、64ビットアーキテクチャ上で64ビットですが、int型は、これらのアーキテクチャ上で32ビットの長残ります)。

要約する:オブジェクトとINT(又は長さ)の大きさを表すためにsize_t型を使用し、他の場合には

size_t型がint(多分構造体)以外に何もすることができますので、

それはです。アイデアは、それが基になる型から仕事だ切り離すことです。

size_tタイプはsizeofオペレータの符号なし整数型として定義されています。現実の世界では、あなたが頻繁にintは(下位互換性のために)32ビットとして定義されているが64ビットとしてsize_t定義されて表示されます、64ビット・プラットフォーム上の(あなたが配列や構造体のサイズ以上4ジブを宣言することができます)。 long intも64ビットである場合、これはLP64大会と呼ばれています。 long intが32ビットであるが、long long intとポインタは64ビットである場合、それはLLP64です。また逆の、メモリを節約するためにスピードのための64ビット命令が、32ビット・ポインタを使用するプログラムを取得する可能性があります。また、intが署名し、size_tが符号なしでされます。

アドレスはintの本来のサイズより広いか短かった他のプラットフォームの数は、歴史的にありました。実際には、70年代と80年代初期には、これがないよりも一般的だった:すべての一般的な8ビット・マイコンは、8ビットのレジスタと16ビットのアドレスを持っていたし、16ビットと32ビット間の遷移はまた、多くのマシンを作成しましたそのレジスタより広いアドレスを持っていました。私は時折、まだ巨大なメモリモードは、16ビットCPU上で32ビットに格納された20ビットのアドレスを有していた(ただし、80386の32ビット命令セットをサポートする可能性がある)MS-DOSのためのBorlandターボCについてここで質問を参照します。モトローラ68000は、32ビットのレジスタとアドレスを持つ16ビットALUを有していました。 15ビット、24ビットまたは31ビットのアドレスを持つIBMメインフレームがありました。あなたはまた、まだ組み込みシステムで異なるALUとアドレスバスのサイズを参照してください。

任意の時間intsize_tよりも小さい、とあなたはunsigned intで非常に大きなファイルまたはオブジェクトのサイズやオフセットを保存しようと、それはバグをオーバーフローさせ、引き起こす可能性がある可能性があります。 intでは、負の数を取得する可能性もあります。 intまたはunsigned intが広い場合、プログラムが正しく実行されますが、廃棄物のメモリます。

あなたが移植をしたい場合は、

あなたは、一般的な目的のために適切なタイプを使用する必要があります。多くの人が(1U < -3のような厄介な、微妙なバグを避けるために)あなたが代わりに符号なしの署名数学を使用することをお勧めします。その目的のために、標準ライブラリは、別のポインタを減算した結果の符号付き型としてptrdiff_t<stddef.h>を定義します。

これは回避策がINT_MAX0またはINT_MINのいずれかに対するすべてのアドレスとオフセットは、必要に応じて、あなたがいずれかを欠場する場合には符号付きと符号なしの量を比較に関するコンパイラの警告をオンにし、チェックの境界にあるかもしれない、と述べました。あなたは、常に、常に、常にあなたの配列は、とにかくCでのオーバーフローのためにアクセスをチェックする必要があります。

の定義 SIZE_T は次の場所にあります。https://msdn.microsoft.com/en-us/library/cc441980.aspx そして https://msdn.microsoft.com/en-us/library/cc230394.aspx

必要な情報をここに貼り付けます:

SIZE_T です ULONG_PTR ポインタが指すことができる最大バイト数を表します。

この型は次のように宣言されます。

typedef ULONG_PTR SIZE_T;

ULONG_PTR ポインターの精度に使用される unsigned long 型です。ポインタ演算を実行するためにポインタをlong型にキャストするときに使用されます。

この型は次のように宣言されます。

typedef unsigned __int3264 ULONG_PTR;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top