- ベストアンサー
しかも最大で約2GB!何の事でしたっけ?
PHPを勉強中ですが^^ http://d.hatena.ne.jp/m-akaho/20090707/1246928512 以上URLの中の9行目あたりに、 >あらかじめ型宣言で長さを指定する必要もなく、しかも最大で約2GBまでという、 ”最大約2GBまで”と制限がありますが、何を言いたいのか分かりません!? C言語だったですよね! 2GBもあれば、20億文字なので、かなりの文字が入ります。 参考プログラムと、そのプログラムが実行された後の結果があれば、 「百聞は一見に如かず」で分かりやかと思われます。 以上よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
PHPの質問なのかC言語の質問なのか… C言語にStringはないです、C++やC#にはあったかな? C言語は全部charで何とかします。 C言語の説明はやっかいなのでPHPだと仮定しますね。 質問だけに答えると Stringは宣言の際に、文字列の長さ(文字数)をあらかじめ指定しなくても使える、ということです。 そのサイトを参考にすると、指定しない場合2GB分まで使えるということです(実質無制限) なのであらかじめ文字数を指定せずに(可変長で)使用したほうが楽です。 一応、可変長文字列と固定長文字列の説明もしておきます。 可変長文字列は何文字必要かわからない文字列に使います、固定長文字列は文字数が決まってる場合もしくは制限がある場合に使います(そのままの説明ですいません) 具体例を挙げると作文で原稿用紙一枚以上書いてきなさいと言われたら最低1枚なので書き始める前に原稿用紙1枚しか用意しないと足らなくなるかもしれないのですぐに用意できるようにしてもらう(可変長) 原稿用紙3枚までと言われたら原稿用紙3枚用意しておく(固定長) 実際に使う場合ですが具体例に当てはめて考えると大体固定長文字列で何とかなるんですが、可変長文字列を使ったほうが色々便利です。 例:作文原稿用紙100枚までと言われてもほとんどの人が2~3枚しか書かないのに全員に原稿用紙100枚配っておくのはもったいない。 固定長文字列ですが、DBなどで使うとか使用言語に制限があるとかそういう時にしか使わないと思います。 動くプログラムなどですが、動くと言うより動かない、エラーが出ると言うのを試したほうがいいと思います。 動くだけでのプログラムでしたら質問主さんが上げたURLのリンクのリンク先にありますね。(一応http://www.tsware.jp/labo/labo_20.htm)
その他の回答 (2)
- wormhole
- ベストアンサー率28% (1626/5665)
リンク先はVBの話のような気がしますけど。
- 春原 なの(@ymda)
- ベストアンサー率37% (668/1777)
こんにちわ。 一般的な32bitコンピュータで扱える最大のアドレッシング領域です。 とはいっても、おかしいですね。 32bitコンピュータであれば、4Gになるはずですが・・・ 2の32は、4294967296 ・・・ ですが、そこから、一つビットを削らないといけません。 符号が必要になります。(アドレッシングに符号はいらないと思いますが・・・) そこから、31bitで計算すると、2147483648 になるわけです。 ---- で、何をいいたいのか、もう別の方向でいいますと・・・ phpって、結局C言語で組まれています。 それなので、結局高速処理をさせたければ、同じ制約にひっかかることになります。 ---- では次に、インタプリタ系の言語で、最大の特徴は メモリ確保の処理が不要な点です。 実は、これは勝手にやってくれるというものです。 一番単純に考えて、このようにして、メモリ確保をしてくれます。 例えば、32bytesのメモリが存在したとします。 00000000000000000000000000000000 ※余計なことは考えず、単純に考えてください その中で、「A」を5バイト確保します。 AAAAA000000000000000000000000000 次に、「B」を3バイト確保します。 AAAAABBB000000000000000000000000 その後、Aを8バイトにします。 (よくご覧ください) 00000BBBAAAAAAAA000000000000000 頭にあった5バイトでは足りないので、後ろからメモリを確保しなおしています。 これと同様に・;・・ Cを4バイト確保する CCCC0BBBAAAAAAAA000000000000000 Bを5バイトにする CCCC0000AAAAAAAABBBBB0000000000 このようなことを自動的にやってくれますので >あらかじめ型宣言で長さを指定する必要もなく ということを記述せず、人間が見やすいように、プログラミングすることができます。
補足
取り急ぎレスありがとうございました。 あとかじっくり読ませていただきます。
お礼
分かりやすご回答誠にありがとうございました。 以下 「固定長文字列は文字数が決まってる場合」 郵便番号・電話番号・はあらかじめ決まっているので、固定長でいいのかな!? たぶん そんな考え方で! 下手にメモリを消耗しないように、可変長文字列が良い! 頭悪いので、何となく分かる気がします。