[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 04/04 22:42 / Filesize : 224 KB / Number-of Response : 1018
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part117



1 名前:デフォルトの名無しさん mailto:sage [2015/05/10(日) 01:08:05.30 ID:mDK/R5EU.net]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part116
peace.2ch.net/test/read.cgi/tech/1424782918/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.95【環境依存OK】
peace.2ch.net/test/read.cgi/tech/1423872914/

次期規格C++1zはこちら
C++14/C++1z 20
peace.2ch.net/test/read.cgi/tech/1410382924/

■長いソースを貼るときはここへ。■
 codepad.org/
 ideone.com/

321 名前:デフォルトの名無しさん mailto:sage [2015/06/12(金) 02:33:05.48 ID:mLuCQ1ez.net]
たいして何もしなくてもとりあえず動くが、継承しているため継承元をおいそれと変えられなくなる継承
いちいち細かく移譲する機能を定義する必要があるが、参照先を変えることで移譲元は変え放題の移譲
どっちdo you like?

322 名前:デフォルトの名無しさん mailto:sage [2015/06/12(金) 08:38:15.95 ID:y2zTlRDt.net]
つ["%.15g"]

323 名前:デフォルトの名無しさん mailto:sage [2015/06/12(金) 08:41:19.38 ID:y2zTlRDt.net]
>>312
少しはprintf()のマニュアルページを読めよ。
そもそも%lfはその成り立ちから考えれば%fにするべきだ。

324 名前:デフォルトの名無しさん mailto:sage [2015/06/12(金) 08:43:31.29 ID:RrO0RO1b.net]
>>312
誤差論を勉強すべし。
もとデータの有効桁数以上計算しても、意味なし。

325 名前:デフォルトの名無しさん mailto:sage [2015/06/12(金) 18:21:48.43 ID:OWLZUxPt.net]
>>319
%lfはその成り立ちを考えればこそ、
最初%fにしてしまった誤りを1999年にようやく訂正できたと思うのだけれど

326 名前:デフォルトの名無しさん mailto:sage [2015/06/12(金) 20:29:38.22 ID:ju6p67Z1.net]
>>321

では、%lf が正解として、そのときに %f はどのような働きを持つ書式指定子になるのか?このとき %lf との違いは何?

327 名前:デフォルトの名無しさん mailto:sage [2015/06/12(金) 21:47:41.39 ID:KUZjLqlU.net]
今日初めて More C++ Idioms を知った
何でこんなに多いんだ

328 名前:デフォルトの名無しさん mailto:sage [2015/06/12(金) 21:49:35.99 ID:TThNPGKa.net]
C++ はあまりに『熟練者に優しく』なってしまったから

329 名前:デフォルトの名無しさん mailto:sage [2015/06/12(金) 21:57:07.02 ID:mLuCQ1ez.net]
C++が必要かどうかはともかく、C++がすでに溶岩流状態なのは分かる
マジで作り直しが必要だと思うんだが、ここまでくるともう無理かも



330 名前:デフォルトの名無しさん mailto:sage [2015/06/12(金) 21:58:33.10 ID:TThNPGKa.net]
作り直すより前にC++以外の解決法を取る人が多いんじゃないか

331 名前:デフォルトの名無しさん mailto:sage [2015/06/12(金) 22:01:31.50 ID:e/45jWns.net]
昔は言語のヒエラルキーはC > C++だったが今はC << C++って感じだな。

332 名前:デフォルトの名無しさん mailto:sage [2015/06/12(金) 23:16:10.78 ID:ddIghUSg.net]
>>322
ようわからんがprintf()の引数に書かれたfloatは勝手にdoubleに型変換されるから%fだけで済んだんだったはず
そのかわりscanf()の%fはfloat

333 名前:デフォルトの名無しさん mailto:sage [2015/06/12(金) 23:22:53.69 ID:4s8u5Pxc.net]
マトモな思考をしていればscanfでは%fがfloatでprintfでは%fがdouble
などという設計をするはずがない

334 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 01:57:15.07 ID:2SY64+lq.net]
iostreamほどキモくなくてprintfより型安全なフォーマット関数が標準にあればいいのに…

335 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 02:07:22.47 ID:xv1nvRDb.net]
faith and braveの人が作ったの使ってるわ

336 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 02:20:43.19 ID:ydZkeZWj.net]
なんていう関数?

337 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 02:23:21.99 ID:xv1nvRDb.net]
ttp://faithandbrave.hateblo.jp/entry/20100803/1280841857
これ

338 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 02:32:52.89 ID:ydZkeZWj.net]
どうも

339 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 04:37:45.77 ID:UPwWPDEU.net]
boost信者菌が移っちゃうぞ



340 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 04:39:52.79 ID:MLTzsV59.net]
iostream はド変態だよな

341 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 08:34:21.77 ID:DqWXtUju.net]
変態なんじゃない
いくらお前がバカでもこれはおかしいと気付けよ
という悪い見本

342 名前:デフォルトの名無しさん [2015/06/13(土) 09:25:12.18 ID:jqTzSEpl.net]
%lfってlong floatだよな
そういう型を作る構想でもあったんじゃね

343 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 09:40:26.14 ID:FQeTzdta.net]
>>329
はずがないってわめいてもそうなってるんだからしょうがない
そもそも printf( ) のせいじゃないから、わめくならCの仕様に文句つけろよ

>>338
俺って最近影薄い?

... double

344 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 11:05:04.66 ID:UaufLIam.net]
クラスのstringzing的なメソッドをoperator<<()のオーバーロードで作ってみたり(さらにその中でstd::ostringstreamを使ってみたり)
するのが漏れの中で一時期流行ったがすぐに廃れた
些細なクラスまでもことごとくstd::ostreamに依存してしまうのがスゲー嫌になった
人間はクラス固有のstringzingメソッドの追加とstd::string::c_str()で渡り合うくらいの所でやめておくべきだったと思うよ

345 名前:338 mailto:sage [2015/06/13(土) 11:07:21.37 ID:UaufLIam.net]
訂正
誤: クラスのstringzing的なメソッド
正: クラスのシリアライズメソッド

346 名前:338 mailto:sage [2015/06/13(土) 11:10:02.77 ID:UaufLIam.net]
まだあったスマンorz
誤: strigzing
正: stringizing
よく間違う、

347 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 13:12:21.92 ID:ZPUmC8i9.net]
>>338
最初期のCに、実際あって、doubleの別名だった。

348 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 20:07:25.12 ID:jKGoCo7L.net]
>>327
いまどきCとか,何かの罰ゲームだと思ってしまう

349 名前:デフォルトの名無しさん [2015/06/13(土) 20:33:52.62 ID:6grWS76k.net]
イテレーターは欠陥だと思う
イテレーターがポインターだったら
++iteratorが使えないだろ
イテレーターに基底ポリモーフィズム使いたいときどうすんの
ただしくは
add(iterator)のようなインライン関数でラッピングするのがよいだろう



350 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 20:42:56.17 ID:jKGoCo7L.net]
>>345
>イテレーターがポインターだったら++iteratorが使えないだろ


351 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 20:45:49.91 ID:7Wz3Bgi+.net]
>イテレーターがポインターだったら
>++iteratorが使えないだろ

ちょっと何言ってるのか
kwsk

352 名前:デフォルトの名無しさん [2015/06/13(土) 20:46:13.99 ID:6grWS76k.net]
iterator->operator++あるいは++(*iterator)
ここまでいえばさすがにわかるでしょwww

353 名前:デフォルトの名無しさん [2015/06/13(土) 20:46:43.91 ID:jqTzSEpl.net]
>>343
↓この時点で、もう廃止されていたんだな
cm.bell-labs.co/who/dmr/cman.pdf

354 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 20:49:03.41 ID:xv1nvRDb.net]
++iteratorじゃないじゃん

355 名前:デフォルトの名無しさん [2015/06/13(土) 20:50:09.59 ID:jqTzSEpl.net]
>>348
いや、その説明で益々わからなくなった
iteratorに指されている実体に対して、
なぜ特定のメンバ関数operator++が呼び出せないのか、
そして呼び出せないことがなぜiteratorの欠陥なのか、
頭悪い俺らにもわかるようにかみ砕いて説明してくれ

356 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 20:51:30.21 ID:ZJMFwp+B.net]
基底ポリモーフィズムって何?
オレオレ用語使わないでくれる?

357 名前:デフォルトの名無しさん [2015/06/13(土) 20:58:02.47 ID:6grWS76k.net]
ベースクラスポリモーフィズムのことだとわかるが
begin()の戻り

358 名前:値がイテレーターのポインターだった場合どうするのか
考えてみよう
猿でもわかると思うが
[]
[ここ壊れてます]

359 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 20:59:38.32 ID:xv1nvRDb.net]
イテレーターがポインタと
イテレーターのポインタじゃ意味が全く違うじゃねーか!



360 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 21:02:58.62 ID:jKGoCo7L.net]
>>348
問題なく ++(*iterator) できているんだが
codepad.org/CsftRCf0

361 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 21:03:06.24 ID:ZJMFwp+B.net]
>begin()の戻り値がイテレーターのポインター
そんな現実にない仮定を持ち出されても困るんだが
普通にポインタの参照剥がしてイテレーター使えばいいんじゃないかな

362 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 21:07:54.58 ID:7HvlRcHr.net]
やっぱりfor(int i=0;・・・が一番だな。
イタレータ何て滅多に使わん

363 名前:デフォルトの名無しさん [2015/06/13(土) 21:09:22.11 ID:6grWS76k.net]
>>355
++(*iterator)をアルゴリズムの中でつかえば
++iteratorがアルゴリズムの中で使えなくなり
その逆も成り立つ
>>356
現実にありまくり

364 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 21:11:38.23 ID:ZJMFwp+B.net]
>>358
例を出してくれ
少なくともC++標準ライブラリにあるコンテナは
イテレーターのポインタなんて返さないんだが

365 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 21:14:45.85 ID:xv1nvRDb.net]
>>355のイテレーターは後置でインクリメントしてるけど
++pとしても何も問題ないし
++pと++(*p)は両立できるぞ

366 名前:デフォルトの名無しさん [2015/06/13(土) 21:20:05.04 ID:6grWS76k.net]
>>359
俺の書いたプログラムには出てくるのだから
その確率は高いだろ
>>360
f(c.begin())としたときc.begin()がポインターであるときと
そうではないときを比べてみよう

367 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 21:22:30.74 ID:jKGoCo7L.net]
イテレータはポインタだと思っていたが,そうじゃないの?

368 名前:デフォルトの名無しさん [2015/06/13(土) 21:23:08.86 ID:6grWS76k.net]
イテレーターはコンセプト、ポインターじゃないよ

369 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 21:24:17.76 ID:jKGoCo7L.net]
イテレータの欠陥ぶりを示す例はないものか?



370 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 21:29:12.75 ID:tUm8uX2M.net]
ようやく理解した
derived d1[N];

do_thingy ( (base*)&d1[0], (base*)&d1[N])
したいということね。
…できないと何か問題あるんだっけ。。

371 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 21:31:02.27 ID:ZJMFwp+B.net]
何だオレオレライブラリの話か
時間損した

372 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 21:33:17.96 ID:xv1nvRDb.net]
>>365
テンプレートでいいんじゃね
イテレーターで解決しようとするから問題がややこしくなる

373 名前:デフォルトの名無しさん [2015/06/13(土) 21:34:39.10 ID:6grWS76k.net]
引数でイテレーターを渡すときは何とかなるが
アルゴリズムの中でイテレーターを使うときに一番困るんだよな

374 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 21:54:57.65 ID:UaufLIam.net]
イテレータへのポインタを自作ライブラリ(非テンプレート)で扱ってどうすんの?
ていうかどういうシチュなのかいまいちわからん…
コンテナと切り離さずに使うイテレータならイテレータをそのまま関数に渡せばいいし
コンテナと切り離された、イテレータ全般というブツに対して何がしかをやりたいということなら、
そのような「非テンプレート」関数は論理的に存在し得ない希ガス…
(イテレータのメンバ関数(たとえばoperator++()とか)は異なるコンテナのイテレータ同士ではシンボルレベルで別の関数なのでビルド時に何を呼ぶのか決まらない)
だからイテレータへのポインタとかナンセンス

derivedなコンテナのbase、というのもlist風とかな特殊な状況でないと存在し得ない(baseとderivedで要素サイズが変わるため、
コンテナとポリモーフィズムはよほどトリッキーなことをしないと両立しないから、こっちの線で読んでも論理的にほぼ不可能なことをやろうとしている希ガス…

というわけでどういうコードを想定しているのやろうか…

375 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 22:07:58.55 ID:ZJMFwp+B.net]
テンプレートが使えないからイテレーターへのポインタなんて
トリッキーなこと考えちゃったんだろうね

376 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 22:09:14.00 ID:UaufLIam.net]
イテレータとポインタの速度差を気にしているのなら
std::vector::iteratorあたりならちょっと賢いコンパイラならそれ自体ビルド結果がポインタと同等な希ガス…
つまり速度重視ならポインタと同等なイテレータを書くか、要素型のポインタを直接使えば良いのであって、
やっぱイテレータへのポインタとかナンセンスなんや

377 名前:デフォルトの名無しさん [2015/06/13(土) 22:17:35.67 ID:jqTzSEpl.net]
イテレータへのポインタか
**は普通に使うよね

378 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 22:28:13.48 ID:XtBiSGNi.net]
メモリポインタなら普通に使うが?

379 名前:デフォルトの名無しさん [2015/06/13(土) 22:30:54.18 ID:ndcd2KXD.net]
イテレータはプッシュしただけで無効になるとかクソすぎるわ
イテレータの問題じゃなくてそのコンテナの問題だけど



380 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 22:31:58.66 ID:xv1nvRDb.net]
listなら無効にならないよ

381 名前:デフォルトの名無しさん [2015/06/13(土) 22:32:57.64 ID:6grWS76k.net]
基底コンテナからの派生コンテナにおいて
基底コンテナのポインターに代入された派生コンテナを考えてみよう
このとき基底コンテナのポインターからどのように派生コンテナのイテレーターをえるのか
あるアルゴリズムの引数として基底クラスのコンテナを渡しアルゴリズムの内部で
イテレーターを得てつかうとする

そのほかにもこの方法は有用な使い方がある例えばイテレーターとして
beginイテレーターとendイテレーターのペアをイテレータと考える
そしてhasNextとnextというおなじみのインライン関数をを自分で定義して使う

382 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 22:36:11.27 ID:ZJMFwp+B.net]
基底コンテナとか派生コンテナとか
オレオレコンテナ作ってるようわぁ…
コードは地獄だろうな…

383 名前:デフォルトの名無しさん [2015/06/13(土) 22:38:10.91 ID:ndcd2KXD.net]
専用のコンテナ作るのはうちの業界では常識だなあ
標準のは使い物にならんから

384 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 23:12:13.91 ID:19wKs4Az.net]
https://www.youtube.com/watch?v=Rpfz3m11bsk
作るのって難しいの?

385 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 23:13:51.68 ID:kddE1Hn/.net]
別に

386 名前:デフォルトの名無しさん mailto:sage [2015/06/13(土) 23:14:02.53 ID:UaufLIam.net]
性能に不足があるのなら専用コンテナを作ればいいじゃない…?←ワカル
よっしゃパパがんばって汎用コンテナの再発明しちゃうぞー←ワカラン…

387 名前:デフォルトの名無しさん [2015/06/13(土) 23:46:22.48 ID:jqTzSEpl.net]
例外だとか動的記憶だとかを満載で使われると困るニーズがあるのよ

388 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 00:17:28.37 ID:ytfJcMgU.net]
よくわからんが それは
カスタムアロケーターでは解決できないのかね

389 名前:379 mailto:sage [2015/06/14(日) 00:38:14.97 ID:VB29lk6s.net]
>383のは漏れジャナイ、
分野によってはmalloc()の使用すら悪設計と看做される
シンプルな造りにすべきときは極限までシンプルに作るべき、だとは思う



390 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 01:02:17.11 ID:NCWDIoFd.net]
できるだけシンプルに、ただしシンプル過ぎないように(名言)

391 名前:デフォルトの名無しさん [2015/06/14(日) 01:11:43.37 ID:AF4mjcpj.net]
無駄な複雑さを取って付けてご機嫌を取ろうとするのは
シンプル過ぎることに輪をかけた悪

392 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 01:13:00.67 ID:ocyd5wvL.net]
>>384
そう言う分野でC++はありなのか?

393 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 01:25:15.44 ID:WgPnxzZM.net]
>>384
>分野によってはmalloc()の使用すら悪設計と看做される
プールからの割当ならカスタムアロケータで十分だろ
というか一般にnew実装でmalloc使ってる事多いのに意味不明

394 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 01:33:46.50 ID:WgPnxzZM.net]
そもそも組み込みのnewをNULLチェックするような分野では
例外/rtti入ってるstlなぞ組み込みでは使わんぞ
メモリプールを使うなら上述の通り
stlで駄目な子はiostreamぐらいだろうに

395 名前:379 mailto:sage [2015/06/14(日) 02:13:56.77 ID:VB29lk6s.net]
>>388
メモリはあらかじめ大きさを設計した固定長の配列を使うのですよ
全コードにそれを通底させれば(C++流では無いやり方でだが)メモリリークの悪夢からは完全におさらばできるし、
デバッガできわめて追いやすい(万が一現実にクラッシュしたとして、メモリダンプからでも簡単に追える
そんな感じで作るなら、アロケータ以外についてSTLに相乗りするのはコードが不透明になるだけでメリットがあんまり無い

malloc()が悪、とにかく動的メモリ確保全般悪、というのは少なくともニコニコ動画の初期のWebサービスを書いてたプログラマの話としてあった(彼らはC++で書いてた

ようわからんが宇宙機のプログラムなんかも原則動的メモリ確保禁止なんじゃね?
ハードエラーを起こしたメモリ領域を回避するプログラムを後からアップロードしたりした事例があるし…

396 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 02:23:26.51 ID:GSBQ/QXQ.net]
おまえらいつまでSTLみたいな化石ライブラリ使ってんだよw
ちなみにSTLにiostreamなんてものは無いぞ

397 名前:デフォルトの名無しさん [2015/06/14(日) 02:24:34.46 ID:onP+ujzn.net]
スタンフォード・テンプレート・ライブラリは公開からまだ5年。

398 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 02:44:19.18 ID:TW+i3CDs.net]
>>390
固定長の配列からメモリをやりくりしても返すの忘れたらメモリ足りなくて詰むがな

399 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 02:57:28.00 ID:VB29lk6s.net]
>>393
返す必要は無いしやりくりすらしない。単に上書きするだけ〜
{ 書き込む主体 } × { 書き込み内容 } と{ 書き込み先アドレス(メモリ) }を1対1で紐付けるという発想の転換、
{ 書き込む主体 }すなわちスレッド(タスク)の数が固定ならこれで書ける
極限まで推し進めれば例外としてはキューだけが残るが、キューに入れたが出し忘れるとかはさすがにコードを見ればわかるのでは…



400 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 03:00:00.33 ID:ntWSdT35.net]
>>393
返すのを忘れるなんてあり得ないくらいに単純に作るに決まってんだろ
想像しろ
グローバル変数g1,g2,g3が有ったとする
mainの中でこれらを駆使して演算するコードを書く
あとは変数をg[3]に書き直せば出来上がりだ

401 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 03:09:20.91 ID:WgPnxzZM.net]
>>390
>メモリはあらかじめ大きさを設計した固定長の配列を使うのですよ
だからそれをプールからの割当という

>>391
確かにそこは語弊が合ったな
「標準ライブラリで駄目なのは」だ

402 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 03:10:21.80 ID:TW+i3CDs.net]
>>394
結局配列の大きさ以上のことはできないのか
メモリケチケチな環境でしか使えんだろうな

>>395
それ3つを配列にしたところで何もうれしくないだろ

403 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 03:16:15.32 ID:VB29lk6s.net]
>>396
グローバル変数int g_hoge[3][1000];と書くのはプールからの割当なのやろうか…
OSのプロセス起動メカニズムからするとプールからの割当なのかもしれんが、OSは十分デバッグ済み(バグ無し)と看做すなら今の話の筋ではないし、
そもそもOS無しというケースもあるし、(その場合、ブートストラップコードがMAPファイルに従って(つまりガチで固定アドレスの領域であるところの)BSSをゼロクリアする。

404 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 03:17:21.08 ID:WgPnxzZM.net]
>>394 >>395
あのなあ…プールから割当する場合は、足りなくなったら一番古いのを開放するんだよ
固定長はそういうデータ構造でえしか使わない、というか使えない

ゲームなどの場合は速度的にプール使うが、確保回数減らすだけで固定長じゃない
組み込みと違ってシステムコールのコストを削る目的だからな

405 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 03:19:10.90 ID:WgPnxzZM.net]
>>398
そこのどこに自作コンテナな要素があるのだ
つかそれもうC++じゃなくてCだろ

406 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 03:27:27.12 ID:WgPnxzZM.net]
もしかして組み込みは固定で確保!
volatile指定で特定アドレスにIO書き込むんだ!とかの話だったの?
てっきりコンテナの話だと思ってたんだが…

407 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 03:28:32.10 ID:poWW0AcO.net]
388が話をすり替えた

408 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 04:26:41.70 ID:WgPnxzZM.net]
というか話の流れ以前によく読むと>>394おかしい?
まあもう良いか

409 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 05:04:41.91 ID:VB29lk6s.net]
どこがどうおかしいのか説明できない>403ェ、
まあもう良いか



410 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 05:19:30.89 ID:l9uYakks.net]
深夜から早朝までワイワイ騒いで話していた事といえばコンテナですらないただの配列とはね…
まあ、配列よく使うけど

411 名前:デフォルトの名無しさん [2015/06/14(日) 08:36:30.36 ID:xTZsKt+a.net]
標準コンテナでダメな点
遅い
デカイ
カスタムアロケータでは充分なカスタムができないし冗長
デバッグとリリースで極端な速度差がある

412 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 11:05:46.12 ID:BYpp5lV7.net]
>遅い
>デカイ
制約の強い状況で部品の自作は当たり前だと思うけどね。
市場に販売される車輪では要件を満たさないので車輪を自作することは、再発名とは言わない。
だが「標準のは使い物にならんから」と言うのは再発明の疑いが濃厚

413 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 12:22:03.44 ID:NCWDIoFd.net]
速度は求めてないからとりあえずmapを大量につかう場合
型ごとにテンプレート展開されるからやたらデカくなるじゃん
あれをコンパクトにする手法とかイディオムってある?

414 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 12:29:48.84 ID:WgPnxzZM.net]
>>404
・マルチスレッドなんてリッチなOSで配列直接割当とか意味不明
・そもそもキューは呼び出し側も書き込みする=まず破綻してる
・その上で競合どう解決すんの?

>極限まで推し進めれば例外としてはキューだけが残るが
>キューに入れたが出し忘れるとかはさすがにコードを見ればわかるのでは…
キューをコードだけ見て消費がわかるとか意味不明
明らかにプログラミングしたこと無いだろ

そんな奴がなんで人に喧嘩売れるんだか
本当理解不能

415 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 12:37:00.30 ID:WgPnxzZM.net]
>>409
訂正
・そもそもキューは読み出し側も書き込みする

カーネル側のメモリは潤沢に使えると言うならまあ通るが
それだと元のシンプルさなんて全然無い上に
ユーザーランドのプログラムだけ低レベルとか相当に変な制限だ

という事で、マルチスレッドでcasも使えないqueueを
セマフォ+大量のスレッドスタック(タスク)退避領域など
結構な量の余分なメモリ領域無しにどう解決すんのか聞いてみたいね

416 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 12:45:04.25 ID:WgPnxzZM.net]
ちなみにcasが使えない理由は書き込み領域が固定だから
別にqueue構造にcasが使えないわけじゃないからね

417 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 13:01:51.04 ID:VB29lk6s.net]
>>409
スレッドごとの記憶をスレッドローカルにすればスレッドごとの競合は考えなくとも良いし、これは配列で実現できる
実は>398にて
 int g_hoge[3][1000];
という2次元配列の例にしたのは、2つめの添え字をスレッド別にする、という想定があったから
(そこまで突っ込んで説明する段階で無かったからその場では説明しなかったが、2つめの添え字をスレッド番号にすれば良い

キューの読み書きは読む側と書く側で当然排他制御する
これはSTLのコンテナを使おうがなんだろうが、マルチスレッド想定では避けられないから漏れの主張とは独立だから漏れのへの批判としては筋違い

やっぱ>409の人のはいまいち発想の転換力が不足しとりますなあ(>394付近の流れあたりから思ってたけどね)…

418 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 13:07:22.92 ID:WgPnxzZM.net]
>>412
>スレッドごとの記憶をスレッドローカルにすれば
>スレッドごとの競合は考えなくとも良いし、これは配列で実現できる
>キューの読み書きは読む側と書く側で当然排他制御する
>これはSTLのコンテナを使おうがなんだろうが、マルチスレッド想定では避けられないから漏れの主張とは独立だから漏れのへの批判としては筋違い
「配列で実現できる」は配列にする理由にならない
発想の転換力って何?君てんかん持ちなの?

419 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 13:09:18.21 ID:+OSalyPV.net]
>>412
thread_localは使わなくていいの?



420 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 13:14:12.33 ID:WgPnxzZM.net]
もう一度丁寧に書くけど
スレッドローカル(笑)まで面倒見てくれる所じゃ
そう言うプログラムじゃIO即値の処理すらインライン関数化してるし
並列処理ならデータ構造いるよね

固定配列いちいち使う理由ってマジで何?
この期に及んでコストとでも言うつもり?

421 名前:デフォルトの名無しさん mailto:sage [2015/06/14(日) 13:15:32.85 ID:VB29lk6s.net]
>>413
実現可能性については納得していただいたということでおk
(>412が通じないほどマルチスレッドに疎かったらどうしようかと思った;
>390以降の流れは実現可能性の議論のつもりなので…

>>414
少なくとも現行のx86やx64では特には不要。配列内のスレッドごとのアクセス領域の境界がキャッシュライン境界と一致してようがしまいが安全にスレッドローカルにできる、
(スレッドAのアクセスの巻き添えを食ってスレッドB用の領域がぶち壊れるという心配は無い






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<224KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef