09/11/22 22:19:09
>>17
分かってないなぁw
改悪になってる・・・
ひょっとして"hogehoge"用に領域が9バイト確保された後、コピーされると思っていない?
違うんだなぁ、これがw。
プログラムがRAMにロードされたとき、
データとして"hogehoge"はメモリ上に展開されて、
その代入ではホゲ文字列の先頭アドレスがstrに設定されるだけ。
分かる?スタティックにする理由は何?
21:デフォルトの名無しさん
09/11/22 22:29:15
>>20
つりか?
22:デフォルトの名無しさん
09/11/22 22:30:17
>>20
23:デフォルトの名無しさん
09/11/22 22:41:34
コピーされなかったら配列は永遠に初期化できないじゃないか。
char *str = "hogehoge"; ならともかく。
24:デフォルトの名無しさん
09/11/22 22:43:40
コンパイル時に数が決まるから strcpy() よりは早いけどな。
まあ、ループ展開しないと比較演算は必要だから同じか。
25:20
09/11/22 23:01:28
>>23
おぉ、すまんすまんw。
自分のコーディングスタイルと違うので間違っちゃったw。
char str[]="hogehoge";
ってすると、スタックに積まれてたw。
これは危険だ!
なにげに勉強になっちゃったw。
では、さらばだ!
26:デフォルトの名無しさん
09/11/22 23:37:40
>>6
いや、数珠つなぎにしたいとかじゃなくて、無限に要素を増やしたいから、どうしたものか・・・と。
で、自分がとりあえず考えた方法があれだったっていう
>>8
だなぁ・・・。
やっぱ、そうしかないのかな?
とりあえず、回答ありがとう。
27:デフォルトの名無しさん
09/11/22 23:50:55
>>5
遅くていいならディスク上にファイルとして配列を持ち、ガリガリやれよ
相当遅いが、1TBの配列だって持てるわけだ
28:デフォルトの名無しさん
09/11/23 00:02:45
*dataと*tmpを用意、*dataに大きさNの配列を動的に確保
要素数がNを超えそうなら*tmpに大きさ2Nの配列を確保して*dataの内容をコピー後ポインタをスワップ
スワップ後のtmpを解放
まあただのvector実装なんだが
29:デフォルトの名無しさん
09/11/23 00:09:32
そも無限は無理。
30:デフォルトの名無しさん
09/11/23 01:51:22
>>26
だから、無制限に要素を増やそうとすると数珠繋ぎとかになるんだよ
じゃなきゃ、溢れた時にでかい領域を再確保してコピーするとかな
で、それらをきっちりやってくれるのがSTLコンテナだが、原理知らないで使うと
えらいパフォーマンス落としたりもするから、一度自分でそれらしく書いてみても
いい
理屈が理解できたら、STLコンテナを使っちゃった方が安心で軽くて楽だが
31:デフォルトの名無しさん
09/11/23 01:56:40
128KBくらいのブロックをつなげろよ。
HDDのクラスタと同じようなもん。
vectorなどは、再配置するから効率悪い。
ブロックで管理すれば再配置無し。
32:デフォルトの名無しさん
09/11/23 02:02:35
実質ブロックで管理(仕様では明記してないけど)してて
それなりに高速なデータ構造となるとstd::dequeかな。
悩んだらとりあえずdequeつかっとけというのが俺の経験則。