2009-07-31 3 views
2

これはおそらくC++ 101の質問です。私はガイドラインがsize_toffset_tを使用するためにどのようなものであるか興味があります。どのような状況のために意図されていないか、どのような状況のためのものではないかなどです。私は多くのポータブルプログラミングを行っていないので、通常、配列サイズ、インデックスなどにはintまたはのようなものを使用しました。しかし、できるだけこれらのより標準的なtypedefのいくつかを使用することが望ましいので、それを正しく行う方法を知りたいと思います。size_tとoffset_tの使用に関するガイドラインは?

Visual Studio 2008を使用してWindowsで開発する場合、実際のtypedefを探すにはどうすればよいですか?私はsize_tがVSインストールディレクトリ内のいくつかのヘッダーで定義されていることを発見しました。したがって、それらのうちどれを使うべきかわからず、どこでもoffset_tを見つけることができません。

+0

興味深い回答 - 「offset_t」が「標準」であるのは間違っているのでしょうか? – Charlie

答えて

11

おそらくoff_tを指していて、offset_tではありません。 off_tはPOSIXタイプであり、Cタイプではなく、ファイルオフセットを示すために使用されます(32ビットシステムでも64ビットファイルオフセットが可能です)。 C99はそれをfpos_tと置き換えました。

size_tは、バイトまたは配列要素を数えます。アドレス空間と一致します。

+1

size_tは最大オブジェクトのサイズを格納するのに必要なサイズですが、アドレス空間全体(必ずしも16ビットのセグメント化されたアーキテクチャと考える)ではありません。 – AProgrammer

+0

@AProgrammer:漠然とした "マッチ"を使って、size_tがアドレス空間にどのように関係しているかを記述しました。あなたは正しい:size_tは、sizeof演算子の結果の型として定義されています。 –

+0

私はあなたが説明する目的のためにsize_tを使用し、offset_tを使いこなすべきではないように思えます。情報をありがとう。 – Charlie

1

offset_tは、C++標準のコピーには全く言及されていません。一方、オブジェクトまたはアレイのサイズを単に表すことを意味する。 size_tは、メモリ内オブジェクトのサイズを格納するのに十分な大きさであることが保証されているため、そのために使用する必要があります。

1

size_tは、C++言語仕様が特定の式で使用されていることを示す場合はいつでも使用します。たとえば、size_tを使用して、戻り値sizeofを格納するか、配列の要素数を表す(new[]size_t)とします。

offset_tが何であるか分かりません。ISO C++仕様では一度も言及されていません。

3

offset_tの代わりにptrdiff_tを意味しますか?これは、std::distanceのようなルーチンによって返される型です。私は、size_tが符号なし(前述のアドレス空間と一致する)であるのに対し、ptrdiff_tは署名されている(理論的には、ポインタ間の「後方」の距離を表すために使用されています。

+0

ディスカッションへの興味深い追加 - 私はptrdiff_tを認識していませんでしたが、役に立つと思えます。 – Charlie

0

古いものをドラッグすると... offset_t(long long)はSolarisのllseek()システムコールで使用され、実際の64ビットファイルに実行される可能性が高い場所で使用されますオフセット...実際には巨大なファイルで作業していることを意味します。

関連する問題