- 1 名前:デフォルトの名無しさん mailto:sage [2019/11/07(木) 11:35:36.76 ID:4wggfTwe.net]
- C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part145 mevius.5ch.net/test/read.cgi/tech/1568362404/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.105【環境依存OK】 mevius.5ch.net/test/read.cgi/tech/1556142878/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語)
- 412 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 12:57:04.85 ID:7fh/nHBZ.net]
- 「そんなもん使う」なんて全面否定しといて
今さらアルゴリズムオーダーとか言い出すのは見苦しい
- 413 名前:デフォルトの名無しさん [2019/12/01(日) 12:58:17.95 ID:gHT6E7kc.net]
- 木とグラフが足りないと思います。
- 414 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 12:58:25.43 ID:n5DjgtsH.net]
- イニシャルコストとランニングコストがあるだろ
数か月〜数年間止まらないようなソフトウェアだと初回起動時のデータ読み込み10億件・数分程度は誤差で済む
- 415 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 13:00:02.95 ID:IheeS71f.net]
- 現存するあらゆるコンテナを実装してくれ
- 416 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 13:00:34.69 ID:YWi4MX0G.net]
- >>401
> 1000倍とかなら考えるだろ? いや? 0.0001ミリ秒が0.1ミリ秒になったところで 大した問題じゃないからね
- 417 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 13:02:56.20 ID:7fh/nHBZ.net]
- 実害が出るかどうかはケースによるのに
全てお見通しの仏様か何かになったつもりのやつが変なことぬかすんだよな
- 418 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 13:08:14.41 ID:p3Z7Nr0h.net]
- >>409
1分と1000分なら大違い トータル0.1ミリ秒なら何でも良いよ気にするな データが多い時の話 オーダーが効いてくる newの時間なんてオーダーの差に比べれば誤差 毎回newだから遅いとかトンチンカン
- 419 名前:デフォルトの名無しさん [2019/12/01(日) 13:09:03.33 ID:gHT6E7kc.net]
- Boostにイテレータが安定なvectorがありますが、速度はlistに劣る場合があると但し書きがありますよ。
- 420 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 13:16:11.26 ID:p3Z7Nr0h.net]
- データ構造は
list, set, リニア(vectorやdeque) で揃ってる これでオーダー的には大抵は問題ない 微妙な高速化が必要なら専用を自作すれば良いが 組み込みでもなければ必要となることはあまりない 複雑なデータ構造は、 標準のデータ構造を組み合わせて作る 複雑なリンク構造はSLAMの世界だとよく使う
- 421 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 13:20:19.28 ID:ZEhocPVE.net]
- いや明らかにsetのオーダーに問題あるだろ。
- 422 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 13:23:43.76 ID:p3Z7Nr0h.net]
- えっ?
- 423 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 13:25:41.03 ID:ZEhocPVE.net]
- 思考停止してないでこれくらいは読んでくれよ。。
https://cpprefjp.github.io/reference/set/set.html
- 424 名前:デフォルトの名無しさん [2019/12/01(日) 13:31:07.65 ID:gHT6E7kc.net]
- 読みました。
- 425 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 13:31:36.80 ID:B2zYeZ5e.net]
- メモリの再配置が起こると都合が(あるいは効率が)悪いオブジェクトを比較的頻繁にnew/deleteしつつ、
一覧を保持しておく用途にはlistが適していると思う。 あ、でも、本体をdequeに、ポインタをvectorに入れて管理する方が速いかな? バグりそうで恐いけどw
- 426 名前: mailto:sage [2019/12/01(日) 13:51:31.01 ID:mRJ420VP.net]
- >>386
木をそこまで悪くいう人を初めて見かけました、大概のデータ構造は木だと思うのですけど…
- 427 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 13:56:38.18 ID:p3Z7Nr0h.net]
- 下手くそが巨体な木を作るとひどいって話だろ
下手に作らなきゃ良いだけ
- 428 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 14:14:45.54 ID:YC7h427T.net]
- >>414
問題にならない用途、条件のもとで使う分には問題ない。
- 429 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 14:32:23.94 ID:9nkP+L/s.net]
- きみはあれか
「ライトバンはセダンにくらべると速度も遅いし馬力もないしとてもあんなもの使えない!」 とかいっちゃうタイプ?
- 430 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 14:47:10.92 ID:HFxN8/oH.net]
- >>419
お前は頭が悪いけどな
- 431 名前:デフォルトの名無しさん [2019/12/01(日) 15:33:24.99 ID:zRxwjdrk.net]
- 一般的には、適切な二分木等で実装されたSetは、メモリ効率が悪いことはあっても速度のオーダーがひどいってことは無いだろ
- 432 名前:蟻人間 mailto:sage [2019/12/01(日) 15:40:09.97 ID:CG2Vs9XU.net]
- C++11のstd::unordered_setに負けてる。
- 433 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 15:45:18.33 ID:7fh/nHBZ.net]
- それはまた別な話だ
- 434 名前:デフォルトの名無しさん [2019/12/01(日) 16:25:31.35 ID:BhgcTKiH.net]
- 二分木がSTLにない理由は簡単。冗長だから。
- 435 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 16:26:58.04 ID:p3Z7Nr0h.net]
- setは内部2分木だって言ってるのに
- 436 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 17:09:51.64 ID:7fh/nHBZ.net]
- >>422
うまい喩えだなw
- 437 名前:デフォルトの名無しさん [2019/12/01(日) 17:18:14.34 ID:BhgcTKiH.net]
- >>428
もしかして二分探索と二分木を混同してる?
- 438 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 17:33:23.47 ID:YHuSOkLJ.net]
- 木の枝を回廊にしたらグラフになります。
グラフはスパコンのベンチマークにされるくらいにメジャーな構造です。
- 439 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 17:36:46.35 ID:YWi4MX0G.net]
- >>411
自分で言ってるやん? データが少ないときなら気にする必要はないので、 データが少ないとき用のアルゴリズムとして 「遅いけど便利」はあったほうが良いだろ
- 440 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 18:14:48.13 ID:XkMP/E25.net]
- 普通ハッシュ使うよね?とかそういう発想が皆無なのが、
ここは馬鹿しかいないってことを示してるよな。。
- 441 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 18:19:34.55 ID:Enyr5Fgf.net]
- >>430
多分混同してるのはお前だけかと
- 442 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 18:22:27.22 ID:Enyr5Fgf.net]
- >>433
バカはお前 set は一般的に、二分木として実装される。 https://cpprefjp.github.io/reference/set/set.html
- 443 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 18:36:45.84 ID:n5DjgtsH.net]
- ハッシュを使うんじゃねえな
ハッシュをどう作るか?になる perl5/hv.h at blead ・ Perl/perl5 ・ GitHub https://github.com/Perl/perl5/blob/blead/hv.h cpython/dict-common.h at master ・ python/cpython ・ GitHub https://github.com/python/cpython/blob/master/Objects/dict-common.h
- 444 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 18:53:22.71 ID:ManO1ilk.net]
- 木やグラフがほしいって言ってる人が、ハッシュマップや内部実装だけが木構造のコレクションなんていらんだろ。。
- 445 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 19:11:19.73 ID:IheeS71f.net]
- うんち
- 446 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 19:20:12.56 ID:fP4CRSrQ.net]
- 「木が欲しい」という要件に対して確認もなく二分木渡すような奴はダメ
ディレクトリ構造表したい奴に二分木渡してどうすんだ
- 447 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 19:25:06.56 ID:WB/GHlzr.net]
- 二分木って規格で決めてるの?
- 448 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 19:36:32.68 ID:IheeS71f.net]
- うんち
- 449 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 20:13:00.99 ID:p3Z7Nr0h.net]
- 「木が欲しい」なんていう人には
とりあえず何でもいいから木を渡しておけばいいんだよ
- 450 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 20:31:05.42 ID:p3Z7Nr0h.net]
- 木は用途や使い方次第で適する作り方が異なるので
標準コンテナを組み合わせたカスタムで良いと思うよ
- 451 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 20:51:16.81 ID:YHuSOkLJ.net]
- https://ideone.com/u8DxeY
ほら〜。あそこに見えるのがN分木のさんぷるだよ〜。 デバッグしてないから酒の肴にぴったりだよ〜。
- 452 名前:デフォルトの名無しさん [2019/12/01(日) 21:01:15.36 ID:BhgcTKiH.net]
- C++11以降なら子ノードをweak_ptrの配列で持つとか?
- 453 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 21:09:55.37 ID:YHuSOkLJ.net]
- >>444
言い忘れていたが、このスレから取得したN分木のコード(>>444)はMITライセンスです。 改造して変な構造を作ろう!
- 454 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 21:31:39.82 ID:vEIKl7N1.net]
- 著作権表示なしにMITライセンスにできたっけ
- 455 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 22:14:07.56 ID:9WgCOaQB.net]
- サンプルとかライセンスとか頭沸いてんのかこいつ
下痢便を神棚に飾って人に配るような所業
- 456 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 22:32:33.44 ID:YHuSOkLJ.net]
- 著作権表示は、
2019 Yakitori が必要なら使って。
- 457 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 22:32:48.31 ID:YHuSOkLJ.net]
- >>449
日本語不自由だな
- 458 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 22:38:20.61 ID:vEIKl7N1.net]
- ?
- 459 名前:デフォルトの名無しさん mailto:sage [2019/12/01(日) 22:41:32.80 ID:IheeS71f.net]
- うんち漏れそう
- 460 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 00:33:17 ID:RIgVO6ZZ.net]
- >>448
だな
- 461 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 02:45:23.23 ID:btxUm/V/.net]
- オランダのTIOBEの調査でも、C#よりJavaやC/C++が人気で、
他の会社による日本での求人数もJavaやC/C++の方がC#より上だそうだ。 JavaScript、PythonやRubyは、求人数では大したことが無いらしい。 Webページを製作している人がネットでは多いので、JS、Python、Ruby などが人気であるかのように見えるだけかもしれない。
- 462 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 03:22:15 ID:Lvay36w9.net]
- >>454
すまん。日本での求人数は、 Java, PHP, Ruby, C#, JS, Python, Objective-C/Swift, C/C++, HTML, Android, Unity, VB.NET, Scala だそうだ。ただし、C#から、C/C++ までは横並びでどれが上とも いえない僅差。そして、Java, Python, Ruby は伸びているが、 PHP, C#, JS, HTML は減っている。 ところが、プログラマ側からの「希望言語」としては、JSがTOP らしい。アメリカでの今後学びたい言語としては、Java, Pyhtho, C++ は上位に来るが、C#, Ruby はかなり下の方。
- 463 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 03:29:10.52 ID:Lvay36w9.net]
- >>455
個人的見解としては、VS code が 5ch で評価が高かったのは、言語が TypeScript や JavaScript と HTML で記述されているので、JSで プログラムすることを希望するプログラマが、JSの求人を増やすために JS製の成果物を高く評価していたからかもしれない。 また、Javaの伸び率はかなり高い。Rubyの求人は日本では多いようだが、 アメリカでは少ない。C#の人気は、ある時期までは延びたが、今は停滞期 に入ったようだ。しかも今後学びたい言語としては、C よりも低い。
- 464 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 03:36:47.51 ID:Lvay36w9.net]
- TIOBEの調査では、Java と Cの人気が同列で高く、Python がそれに続く。
また、CとC++を合計すると、Javaよりもだいぶ高い人気となる。 Java 16.2% (-0.50) C 16.0% (+1.64) Python 9.84% (+2.16) C++ 5.60% (-2.68) C# 4.31% (+0.36) VB.NET 4.22% (-2.26) JS 1.93% (-0.73) PHP 1.72% (-0.66) SQL 1.69% (-.15) Swift 1.65% (+0.20) Ruby 1.26% (+0.17) Objective-C 1.20% (-0.28) ・・・ D 0.927% (-0.64) Go 0.853% (-0.64)
- 465 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 03:57:59.67 ID:qRRc8YVo.net]
- CとC++とC#の区別ができる営業いないんだよな
- 466 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 04:06:59 ID:3lD7gpLY.net]
- 営業って年取った技術者がやるもんだろ
- 467 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 06:49:53 ID:MoZo3p1s.net]
- 今はもう戦力外技術者なんて即解雇だよ
そもそも大手だと営業と技術者は別会社
- 468 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 07:41:42.15 ID:tW9RdYoY.net]
- なんで大手条件が勝手に加わるのか
- 469 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 08:23:03 ID:mQVkXZA1.net]
- 零細中小なんて誰も興味ない
- 470 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 08:42:45.44 ID:GldGaTIn.net]
- 比較するもんじゃないだろ
C++は好きだが、在庫管理システムをC++で書けと言われたら全力で拒否してC#を推すぞ俺は
- 471 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 11:06:47 ID:5u9Q6RC4.net]
- ほんとそれだな
きみらはいつになったらライトバンとセダンの使い分けができるようになるのか・・
- 472 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 11:42:23.75 ID:L9XsPrRa.net]
- >>464
君「ら」? お前のことだろ
- 473 名前:デフォルトの名無しさん [2019/12/02(月) 13:15:55 ID:/N45p/D+.net]
- でもJavaはベンチとると速いんだけど、実際は遅い。
これ、リソースを食いすぎるのが原因なので、本当はサーバーよりクライアントに向いているんじゃないのかな。
- 474 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 13:16:09 ID:xJykAg3Z.net]
- ライトバンとセダン?
スリッパと自転車と乗用車と飛行機とロケット くらい使い分けないとダメ
- 475 名前:デフォルトの名無しさん [2019/12/02(月) 13:19:02 ID:/N45p/D+.net]
- C++はメモリーの分断化があるので、長時間起動し続けるサーバーには向いていないと言われてるんだけど、実際にやってみたら全く問題なかった。
考えてみると、JavaプログラムをホストするシステムがC/C++で書かれてるんだから、本当に問題になるなら、Javaも無理なはず。
- 476 名前:デフォルトの名無しさん [2019/12/02(月) 13:20:28 ID:/N45p/D+.net]
- Androidは特に不満もなく動くので、Javaはクライアントでこそ力を発揮するような気がします。
- 477 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 13:21:19 ID:xJykAg3Z.net]
- メモリは潤沢にあるし
アドレス変換もあるので よほど下手に作らなければ PCでフラグメントは問題にはならない そんな事を心配する時代じゃない 組み込みだと話は別
- 478 名前:デフォルトの名無しさん [2019/12/02(月) 13:21:57 ID:/N45p/D+.net]
- 機種ごとの差を言語が吸収
- 479 名前:してくれるなら、こんな楽なことないし。
一方、サーバーは、サービス提供側が機種を自由に選べるのでJavaである必要が無いと思う。 [] - [ここ壊れてます]
- 480 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 13:23:17 ID:xJykAg3Z.net]
- >>469
比較的最近追加された リアルタイム系オーディオAPIは C/C++での提供ですね 用途によってはいまだにC/C++が必要
- 481 名前:デフォルトの名無しさん [2019/12/02(月) 13:23:19 ID:/N45p/D+.net]
- >>470
でも、フラグメントが・・・と言われると、なるほどと思うじゃないですか。 僕もいずれ別の言語で書き換えるつもりだった。 でも問題なかった。
- 482 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 13:30:11 ID:wB1a1keO.net]
- >>468
それは完全に理解不足 Javaや.NETのVMはC++で静的に確保した大きなメモリ領域をヒープと呼んでいる でアプリ内でnewするとオブジェクトとしてその中の領域が割り当てられ、ハンドル(生ポではない!)をアプリがオブジェクト参照として受け取る C++のオブジェクトとの大きな違いはオブジェクトを再配置できることであり、 GCが必要に応じてヒープ上のオブジェクトを移動して詰めるため断片化が生じにくい C++でも生ポを使わなければ再配置できるんだけどね
- 483 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 13:31:49 ID:az4xQt0G.net]
- メモリ激増のお陰じゃねえの
- 484 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 13:41:55 ID:qRRc8YVo.net]
- その辺はOSの仕事であるべきやと思うわ
- 485 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 13:49:06 ID:az4xQt0G.net]
- やってることがさほど変わらず100MB確保から1GB確保にするだけで
断片化率が1/10になる プログラミングの技量が全く変化しないのにも関わらず安全性が10倍になる つまりマシンの搭載メモリが1GBから10GBになるだけで安全係数が10倍になる これぞ大富豪プログラミング
- 486 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 15:06:09.31 ID:rcvN6dfE.net]
- >>474
windows3.1のGlobalAllocみたいのを今さらドヤられても…
- 487 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 15:20:31.50 ID:Vo2mhncO.net]
- >>468
実はかなり古くから、C/C++ の malloc(), new のヒープメモリから確保したメモリの 断片化は、実際に問題になるようなことはとても少ないといわれています。 というのは、断片化というのは、確保したメモリを開放したときに出来た 「隙間にある空きメモリ」が再利用されにくい場合に起きるものなんですが、 実際には、再利用されることが多いためです。なぜなら、おなじサイズの オブジェクトを new することが多いためです。この場合、完全に再利用されるので 断片化の問題と言うものは全く起きないと言っても過言では有りません。 それから、通常、1つのオブジェクトのサイズは小さく、それが多数集まって データをなしていることが多いのです。このことから、異なるサイズのオブジェクト であっても、1つ1つのオブジェクトのサイズが小さいため、断片化したとしても、 再利用される確率が高いのです。まず、同じサイズのオブジェクトであれば再利用されます。 異なるサイズであっても、昔開放されたオブジェクトよりも、小さいサイズのオブジェクトを 新しく確保する場合であれば再利用されます。 このようなことから現実の例では、断片化しても、使われないメモリの量はある程度の比率 に収まると言われており、それは GarbageCollection を行うためのオーバーヘッドの メモリのサイズと比べても余り大きいものではないのです。 ゲームはメモリー効率も求められますが、それでも C/C++ が使われているのは、 メモリー断片化の量が一定比率より多くなら無い事が経験的に知られているためです。
- 488 名前:デフォルトの名無しさん [2019/12/02(月) 15:28:19.20 ID:/N45p/D+.net]
- フェイスブックがPHPのコードを翻訳機でC++コードに変換して配備してるそうですが。
そんなことするなら最初からC++で書けばいいのに。
- 489 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 15:33:38.42 ID:Vo2mhncO.net]
- >>474
C/C++ では、配列ではなくリンクリストを積極的に使うようにすることに よって、メモリーが断片化しても再利用される確率を高く
- 490 名前:することができます。
というのは、データの基本となっている要素のオブジェクトのサイズが 小さいため、さまざまなサイズのデータを new しても、結果的に、 断片化された空きメモリも高い確率で再利用されるためです。 new、delete するオブジェクトのサイズがランダムな場合で、 断片化空きメモリが残っている場合、確率論的には、おおよそ 2回に1回は 断片化空きメモリが再利用されることになるでしょう。もちろん、 delete された回数が少な過ぎる場合、そもそも断片化空きメモリの個数が少なすぎる ので、再利用できる確率は低くなります。それは、初期化時やファイルからデータ 読み込み時などにどんどんメモリを new していくよう場合ですので、そもそも 断片化が起きる余地も有りません。 なお、ポインタとリンクリストを組み合わせると、よくある場合には、他の 集合アルゴリズムよりも、効率が高くなりやすいことが知られています。 ただし、文字を集合させて文字列を作るような場合は例外です。 [] - [ここ壊れてます]
- 491 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 15:39:04.52 ID:Vo2mhncO.net]
- >>481
配列の場合、delete するとメモリー上に大きな空き領域が出来ますが、 それより大きなサイズの配列を new しようとすると、そこが再利用できません。 なぜなら、配列の場合、連続したメモリ領域が固まって必要になるため、 要素の個数が N だとすると、N 個全てが一度にまとまって入りきる領域を探す 必要になるためです。 ところが、リンクリストの場合、要素数 N が大きくなっても、バラバラな 領域に分散して格納することが出来ます。すると、とても高い確率で、 分断化された空きメモリが再利用されることになります。
- 492 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 15:50:07.84 ID:Vo2mhncO.net]
- >>481
「2回に1回」と書きましたが、実際にはもっと確率は高いです。 リンクリストを使っている場合、要素を全部 delete したような場合は、開放された 空きブロックは、余り断片化せずに、比較的高い確率で結合され、大きな空きブロックに なるためです。空きメモリは、元の要素のサイズの複数個分以上になっている確率が 高くなります(複雑ですが、管理領域のサイズもこれに加わります。)。 この性質があるため、現実には、小さいサイズのオブジェクトを要素とする集合 が多種類有った場合、それを好きに new, delete した場合、50% よりずっと高い確率で 断片化空きメモリーは再利用されます。
- 493 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 16:10:33.93 ID:Vo2mhncO.net]
- >>483
誤解無きように細くしておくと、「50% より大きい」というのは、 「断片化された空き領域が再利用される確率」 のことで、「断片化率」ではありません、。断片化率はもっと 小さな値になり、条件によりますが、例えば、数%〜10%程度 が目安になります。最悪のケースだともっと大きいのですが、 ケースバイケースで適切なデータ構造(集合アルゴリズム)を 使っているとこの程度に収まります。また、適切なデータ構造を 選択することはそんなに難しいわけではありません、。
- 494 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 16:15:53.26 ID:Vo2mhncO.net]
- >>475
既に、Windows95くらいの時期のメモリ容量で、C/C++のメモリ断片化は 問題が無い程度になっていました。実際には、MS-DOSの時代でも既に 問題なかったのですが。 とにかく、今の若い人の目線で言えば、古代ともいえるくらい古い時代に 既に C/C++ のメモリー断片化問題は問題が無い程度にハードウェアが 発達済みなのです。PC-8801 の 8BIT 時代には問題があったので、 N88-BASIC を筆頭に、GarbageCollection 方式をとっていましたが、 それは、若い人には「超古代文明」時代でしょう。
- 495 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 16:34:28.08 ID:Vo2mhncO.net]
- >>485
また誤解が入りそうなので細くしておきます。 N88-BASIC などが GarbageCollection を使っていたのは、本当に マシンのメモリが少ないのでデータをぎゅーぎゅー詰めに隙間無く 入れることが重要だったためです。 一方、JavaやC#がGarbageCollection を使っているのは、どちらかと いうと、「メモリー開放の自動化」のためです。参照カウンタだけで は、循環参照問題が生じるため、時々、広い範囲のメモリブロックを 巡回して、循環参照していても本当に使って無い場合を厳密に見つけ出して、 徹底的に開放することを行います。 そのため、メモリーの断片化問題とはまた違う意味で、メモリー開放の 自動化には、GarbageCollection が必要となっています。 N88-BASIC 時代と、現在の Java, C# とでは、同じ GarbageCollection でも主な役割が違うと考えられます。もちろん、断片化を防ぐ役割も同時に 果たしてくれますが。
- 496 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 16:40:43.00 ID:Vo2mhncO.net]
- >>486
誤字訂正: 細く ---> 補足 ・BASIC言語にはポインタが無かったので、循環参照問題は有りませんでした。 ・BASIC言語における GarbageCollection は、主に文字列領域の開放のためです。 A$="HELLO WORLD" と入れた後、A$="" とした時、元の文字列に使っていた 領域は、しばらく経った後に GarbageCollection で開放される仕組みでした。 ですので、文字列を余り使わなければ GarbageCollection も余りおきませんでした。 なお、DIM A(100) のように確保した配列は、余り開放することは有りませんでしたが、 開放した場合も、しばらく後に GarbageCollection の対象になっていたと思われます。
- 497 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 17:06:01.34 ID:wB1a1keO.net]
- リンクリストってシーケンシャルアクセスで毎回キャッシュミスするから、
配列の代わりに全面的に使ったりしたら断片化とか最早どうでもいいレベルでパフォーマンス低下するぞ
- 498 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 17:15:40.51 ID:Vo2mhncO.net]
- >>488
リンクリストでシーケンシャルアクセスする場合、キャッシュ以前に ポインタをたどるようにアクセスしないといけないのですが、 最近、配列と同じような通し番号方式でアクセスしようとする人が 多くなっています。ライブラリなどは、以前にアクセスした番号が k の場合、そのポインタを覚えておいて、プログラマが k + 1 の番号 をアクセスしようとした場合、後続のノードへのポインタをたどる ことで高速化している場合があるので、特に問題が無い場合がありますが、 それを深く理解せずに、本当に先頭のノードからたどってしまった場合、 本来なら O(N)で済むところが、O(N^2) になってしまいます。
- 499 名前:デフォルトの名無しさん [2019/12/02(月) 17:16:14.80 ID:/N45p/D+.net]
- >>487
ヌルポ。
- 500 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 17:18:32.46 ID:Vo2mhncO.net]
- >>489
C/C++ でのリンクリストは、場所を覚えるのは通し番号ではなく、ポインタ で行うことが基本です。ところが、最近、通し番号で覚えてしまうプログラムを 書く人が増えているように感じます。それは、キャッシュのために遅くなっているの ではなく、計算オーダーが完全に違ってくるために遅くなるため、ただごとではない 遅さを招きます。
- 501 名前:デフォルトの名無しさん [2019/12/02(月) 20:46:52.56 ID:rSqEF7g8.net]
- ネトウヨ東大特任准教授、謝罪するも言い訳「AIの過学習によるもの」
https://medaka.5ch.net/test/read.cgi/jsaloon/1575275488/
- 502 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 20:59:09.09 ID:RyZvLJkF.net]
- >>487
循環参照問題の有無はポインタ(アドレス)とは関係ないでしょ。
- 503 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 21:16:13.89 ID:6AEGHd3a.net]
- TIOBEってなんて読めばいいの?
ちおべ?
- 504 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 22:59:36.28 ID:OlcC/UBE.net]
- ハッシュテーブルで要素Xが既存要素Yと衝突した場合でもXを格納したい場合は
リハッシュかリストになる キモス リハッシュで容量をちゃんと使い切るには相当にハッシュ関数を考えねばならない上に 衝突データを取り出すのに何回リハッシュしたかを見ながら要素をたどっていく必要があり、 ハッシュの検索性を帳消しにしてしまいかねない よってリストのが圧倒的に簡単で速い
- 505 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 23:15:49.08 ID:OlcC/UBE.net]
- >>493
ある ガベージコレクト対象データでもって他のガベージコレクト対象データを指し示すような 再帰構造が表現不可能なら循環参照は当然起きない N88-BASICの文字列はキャラクターの集まりであって他の文字列を指し示したりできないから、 相当の無能か悪意を伴って設計しない限り、文字列メモリのガベージコレクションで 循環参照は起こしようが無い(やるべきことは素のmalloc/freeに他ならない
- 506 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 23:29:11.52 ID:VdJ0qliF.net]
- >>496
>>487で自分で書いているように配列がガーベジコレクションの対象になっているなら、循環参照は起こり得るんでないの?
- 507 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 23:30:20.73 ID:VdJ0qliF.net]
- すまん>>497はまちがい
- 508 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 04:41:05.52 ID:LCf1R81a.net]
- まだやってたのか
うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち
- 509 名前:デフォルトの名無しさん [2019/12/03(火) 06:45:35 ID:Ocr+v9UU.net]
- C++20あたりになるともうついていけそうにないな。
- 510 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 07:20:16 ID:k7viogN8.net]
- conceptの仕上がり次第だろうな
Cのrestrictもそうであるように うるさすぎると嫌気がさすやつが続出する
- 511 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 14:10:18.28 ID:LOAssVxZ.net]
- 実際にコードを書いてないやつほど仕様を知っててアホみたいなこだわりを見せる
ってことが常態化してる。 そろそろロクでもない結末を迎える。
- 512 名前:デフォルトの名無しさん mailto:sage [2019/12/03(火) 14:24:39.60 ID:jKB+EPlO.net]
- 並列処理じゃないですかねこれからは
マルチなコアをもりもり使えないと
|

|