2012-03-10 22 views
7

なぜ私はint型を使うことができるのかというと、このsize_tが使われているのだろうかと思っていました。そのsize_tsizeofオペレータの戻り値の型です。どういう意味ですか? sizeof(int)を使用してint型の変数にその戻り値を格納する場合と同様に、それも機能します。size_t型の変数に格納する必要はありません。誰かがsize_t型を例として使用する理由を誰でも説明できますか?

+0

intを使用して、2147483647をintに格納するのと同じ方法で、sizeofの戻り値を格納することができます。実装固有のサイズが正しく一致するだけです。 – Lalaland

+0

この質問もご覧ください:http://stackoverflow.com/questions/918787/whats-sizeofsize-t-on-32-bit-vs-the-various-64bit-data-models – ChrisWue

+0

誰かがsize_tが同じサイズのプロセッサが登録されていますか? – arthurprs

答えて

9

size_tは可能な限り最大サイズを表すことが保証されていますが、intは基本的な考え方を明確に理解したいと思っています。つまり、size_tはより移植性があります。

たとえば、intには最大255まで格納できますが、5000バイトの配列を割り当てることができますか?明らかにこれはうまくいかないでしょうが、size_tとなります。

+1

技術的に 'int'は少なくとも16ビットでなければなりません少なくとも範囲[-32767..32767]に及ぶ必要があります。 (なぜ-32768ではないのですか?Univacの古いマシンでCを使いたい人のために、1の補数システムとサイン・アンド・マグニチュードシステムに対応するためです。もちろん、これらは18ビットと36ビットの整数を持ち、 char'。) – torek

+0

@torek何らかの理由で私はintがC言語ではなく> 16でなければならないという印象を受けています。しかし、標準をチェックしていない。 – Pubby

+0

@Pubby:C++はCから継承しています。1.1 p2 C++はISO/IEC 9899:1999に記述されているCプログラミング言語に基づいた汎用プログラミング言語です

4

最も単純な例はかなり日付である:RAMの64 Kと古い16 bit- intシステムに、intの値は、-32768から+32767までのどこかであってもよいが、後:

char buf[40960]; 

バッファbufが40キロバイトを占めるため、sizeof bufは大きすぎてintに収まらず、unsigned intが必要です。あなたは32ビットintを使用しますが(32ビットint「I32LP64」のモデルに呼ばれているものの場合のように、プログラムは一度に4 GBを超えるRAMをアクセスすることを許可する場合

同じことが、64今日起こることができます-bit longとポインタ)。ここではタイプsize_tunsigned longと同じ範囲になります。

0

これは実装が定義されていますが、size_tはしばしば64ビットであり、intはまだILP64 or SILP64モデルでない限り、まだ32ビットです。

0

あなたが使用しているアーキテクチャ(16ビット、32ビットまたは64ビット)によって、intは異なるサイズになることがあります。

あなたは私がuint16_tかのuint32_tを使用する特定のサイズが必要な場合は....あなたはより多くの情報あなたがほとんど同じの符号なし整数にポインタをキャストするためsize_tの使用

What does the C++ standard state the size of int, long type to be?

1

このスレッドをチェックアウトすることができますポインタが整数であるかのように計算を実行します。そうでなければ、コンパイル時には阻止されます。このようなコードは、さまざまなポインタサイズのコンテキストで正しくコンパイルおよび構築することを意図しています。 32ビットモデルと64ビットモデル

関連する問題