[過去ログ]
C++相談室 part164 (1002レス)
C++相談室 part164 http://mevius.5ch.net/test/read.cgi/tech/1683600652/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
460: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f73e-kkOg) [sage] 2023/07/09(日) 10:57:36.03 ID:6ZzBc/+b0 C++ なら operator new のオーバーロードなんかも出来るわけだし コンテナ類もアロケータを差し込むことが出来るわけで メモリアロケーションに関して過剰なほどのカスタマイズ性がある。 もちろん提供されるアロケータで性能が足りるならそれに越したことは無いが、 足りないときでもなんとかできる可能性があるってのは C++ のいいところだよ。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/460
461: デフォルトの名無しさん (ワッチョイ 9728-0TTi) [sage] 2023/07/09(日) 11:09:45.90 ID:ihdHNtRI0 前なんかstd::vector<T>をdllに渡したら(コピー渡ししたら)クラッシュするトラブルに遭遇して 原因はC++のランタイムのバージョン相違やったorz http://mevius.5ch.net/test/read.cgi/tech/1683600652/461
462: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f73e-kkOg) [sage] 2023/07/09(日) 11:44:01.32 ID:6ZzBc/+b0 DLL を跨ぐときは生配列が結局は楽かなぁ。 他環境に移植する予定がないなら COM の流儀に従って SAFEARRAY とか。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/462
463: デフォルトの名無しさん (ワッチョイ d701-/+4S) [] 2023/07/09(日) 21:30:46.83 ID:Y+7J8yUt0 アロケータを指定するときってのは性能どうこうではなく環境や設計上の理由が主だよ それよりpolymorphic_allocatorはなんでコンテナのコピー時にget_default_resourceを返すんだマジで http://mevius.5ch.net/test/read.cgi/tech/1683600652/463
464: デフォルトの名無しさん (ワッチョイ 9701-gR7n) [sage] 2023/07/09(日) 21:44:31.99 ID:r53YpIy/0 10年くらい前だけど6コア(12スレッド) x 双頭のマシンで Debianのlibcのmallocをjemallocに置き換えたら かなり速くなって感動したなぁ いまのglibcのmallocはどうなんだろ? http://mevius.5ch.net/test/read.cgi/tech/1683600652/464
465: デフォルトの名無しさん (ワッチョイ 82f0-rqn1) [sage] 2023/07/15(土) 10:34:20.34 ID:/MZbR2lO0 最近クラス作るのが面倒な時thread_localのstd::vectorよく使うんだけど 何か問題起きたりする? http://mevius.5ch.net/test/read.cgi/tech/1683600652/465
466: デフォルトの名無しさん (ワッチョイ e2f0-WYHp) [sage] 2023/07/15(土) 11:05:18.52 ID:08dxROCJ0 問題を検証するコードを書いて実験してみれよ 一日で組めるだろ http://mevius.5ch.net/test/read.cgi/tech/1683600652/466
467: デフォルトの名無しさん (テテンテンテン MM34-Dvnh) [sage] 2023/07/15(土) 12:21:20.90 ID:lF+Fe8GnM >>466 それ悪魔の証明 http://mevius.5ch.net/test/read.cgi/tech/1683600652/467
468: デフォルトの名無しさん (ワッチョイ 5cfb-cHdk) [sage] 2023/07/15(土) 14:11:00.47 ID:bqZq+Kwu0 1日で組んだコードも合わせて技術ブログに記事を書くところまでがセット http://mevius.5ch.net/test/read.cgi/tech/1683600652/468
469: デフォルトの名無しさん (ワッチョイ 3279-EJzg) [sage] 2023/07/15(土) 14:24:56.68 ID:V/XrAlYW0 よく使う割に問題が起きてないならそれは問題ないのでは 証明終わり http://mevius.5ch.net/test/read.cgi/tech/1683600652/469
470: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bd32-2eqx) [sage] 2023/07/15(土) 14:38:32.48 ID:e8BGem9r0 >>465 std::vector 型の変数がスレッドローカルとして定義されること自体は問題を引き起こさない。 スレッドローカルな変数はスレッドの生成・解放と同じタイミングで生成・解放される普通の変数。 それで問題が起こるなら単にプログラムのロジックに誤りがあるってだけ。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/470
471: デフォルトの名無しさん (ワッチョイ 915f-9/0y) [sage] 2023/07/15(土) 15:24:04.02 ID:8R7I+TSs0 「クラス作るのが面倒な時」と「thread_localのstd::vector」の関連が見えないな。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/471
472: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bd32-2eqx) [sage] 2023/07/15(土) 16:45:55.27 ID:e8BGem9r0 >>741 std::thread は関数オブジェクトを受け取ることが出来る。 スレッドに固有、かつそのスレッド全体で使うようなデータは その関数オブジェクトが所有するのが常道のひとつ。 しかしスレッドローカル変数もスレッドの寿命と一致する形でのデータ置き場になる。 そういう意味で代替品であると見做すことができる。 という話だと私は解釈したが、 std::vector がどこから出てきたかはわからん。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/472
473: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9832-2eqx) [] 2023/07/15(土) 19:51:59.74 ID:jZQsWptc0 コードで言うなら https://wandbox.org/permlink/oZ8EAGChqPtobFuY みたいにするのは面倒だから https://wandbox.org/permlink/90mvVtrKUca4Iyic でいいよね? みたいな話だと思った。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/473
474: デフォルトの名無しさん (オイコラミネオ MM71-9/0y) [sage] 2023/07/15(土) 20:03:36.74 ID:UiYhW/dJM そもそもの知識がないからpythonみたいにリストにぶち込んで インデックスですべてやろうとかそんな話かとオモタ python界はすごいぞ クラスに変数など作らずすべて辞書にぶち込んで使ってたりする http://mevius.5ch.net/test/read.cgi/tech/1683600652/474
475: デフォルトの名無しさん (オイコラミネオ MM71-9/0y) [sage] 2023/07/15(土) 20:19:33.71 ID:UiYhW/dJM a = {} a['taro'] = {"name":"太郎","age":25, "sex":"男"} a['hanako'] = {"name":"花子","age":18 ,six":"六"} http://mevius.5ch.net/test/read.cgi/tech/1683600652/475
476: デフォルトの名無しさん (ワッチョイ e2f0-WYHp) [sage] 2023/07/15(土) 20:24:16.88 ID:08dxROCJ0 変数がすべてバリアントだからなw http://mevius.5ch.net/test/read.cgi/tech/1683600652/476
477: デフォルトの名無しさん (オイコラミネオ MM71-9/0y) [sage] 2023/07/15(土) 20:27:48.20 ID:UiYhW/dJM if a['taro']["age"] ==a['hanako']["age"]: これって全然コード補完効かないから脳が死にかける http://mevius.5ch.net/test/read.cgi/tech/1683600652/477
478: デフォルトの名無しさん (オイコラミネオ MM71-9/0y) [sage] 2023/07/15(土) 20:32:21.17 ID:UiYhW/dJM name="name" age="age" sex="sex" six="six" とかしたらいいんか if a['taro'][age] ==a['hanako'][age]: 嫌すぎる http://mevius.5ch.net/test/read.cgi/tech/1683600652/478
479: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 163e-MI76) [sage] 2023/07/15(土) 20:42:45.70 ID:oCSaktaG0 プログラマではない人間もユーザー層として存在するし Python はそういう人間にもリーチしてしまったから 割合としてワヤなものもできやすいというのは理解できる。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/479
480: デフォルトの名無しさん (オイコラミネオ MM71-9/0y) [sage] 2023/07/15(土) 20:45:00.27 ID:UiYhW/dJM a['taro'] = {"name":"太郎","age":25, "sex":"男"} だけ見るとjsonなのかとも思える http://mevius.5ch.net/test/read.cgi/tech/1683600652/480
481: デフォルトの名無しさん (JP 0H8a-PPvg) [] 2023/07/15(土) 21:13:09.66 ID:2P0YU21lH あるクラスにあるクラスのコレクションを抱かさせてるなんて良くあると思うけど その際に外部からそのコレクションを参照したい場合、どうするのが定石なの? class Datas {private:std::vector<Data> _datas;}; publicにするとか、std::vector<Data>::iteratorをpublicにするとか const Data& operator[](int index)をpublicにするとかいろいろあると思うけど http://mevius.5ch.net/test/read.cgi/tech/1683600652/481
482: デフォルトの名無しさん (オイコラミネオ MM71-9/0y) [sage] 2023/07/15(土) 21:18:25.83 ID:UiYhW/dJM ファーストクラスコレクションの話? http://mevius.5ch.net/test/read.cgi/tech/1683600652/482
483: デフォルトの名無しさん (ワッチョイ df01-L4gQ) [sage] 2023/07/15(土) 21:22:12.84 ID:wfhnDtnz0 単数: datum 複数: data http://mevius.5ch.net/test/read.cgi/tech/1683600652/483
484: デフォルトの名無しさん (オイコラミネオ MM71-9/0y) [sage] 2023/07/15(土) 21:24:39.81 ID:UiYhW/dJM 今日本屋で○○データムと言う本があった DATAの単数形がdatumと言うことにこだわる大人って理系だけなんだろうなと感じたらこれだよ 即出て来た http://mevius.5ch.net/test/read.cgi/tech/1683600652/484
485: デフォルトの名無しさん (ワッチョイ df01-L4gQ) [sage] 2023/07/15(土) 21:35:08.39 ID:wfhnDtnz0 datumに拘ってるのではなくdatasなんて言葉はない http://mevius.5ch.net/test/read.cgi/tech/1683600652/485
486: デフォルトの名無しさん (JP 0H8a-PPvg) [] 2023/07/15(土) 21:43:33.89 ID:2P0YU21lH そこか、英単語をぐぐったら解決しました。 ありがとうございました http://mevius.5ch.net/test/read.cgi/tech/1683600652/486
487: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 163e-MI76) [sage] 2023/07/15(土) 21:58:55.40 ID:oCSaktaG0 >>481 場合による。 見せる相手が最初から限定的であるような場合はフレンドを宣言すればいい。 コンテナ系クラスとかは内部的にはたぶんノードを表すクラスとか も使ってると思うけどそういう感じで密接に関連がありつつ 他では使う可能性がないような強い関係性がある場合はフレンドにする。 データを保持するためだけの汎用クラスとして定義するならデータメンバは public にしてもかまわない。 std::pair とかはそうなってる。 もうちょっと疎結合にしたいときなら許したい操作だけをpublic なメンバ関数として公開すると思う。 既存のクラスを使いつつ外部に公開するのはサブセットにしたいという場合なら プライベート継承した上で公開したいメンバだけ using するという方法も取れる。 #include <iostream> #include <vector> struct Data : private std::vector<int> { using std::vector<int>::vector; using std::vector<int>::operator[]; using std::vector<int>::begin; using std::vector<int>::end; }; int main(void) { Data foo = {1, 2, 3}; for (int x : foo) { std::cout << x << std::endl; } } http://mevius.5ch.net/test/read.cgi/tech/1683600652/487
488: デフォルトの名無しさん (ワッチョイ df01-L4gQ) [sage] 2023/07/15(土) 22:04:51.15 ID:wfhnDtnz0 >>481 privateメンバなのだから できるだけ外部からそのコレクションを参照しないように設計するべきだと思うよ どうしてもってならiteratorではなくconst_iteratorにするとか あなたが書いてるようにconst Data&を返すaccessorを実装するとか http://mevius.5ch.net/test/read.cgi/tech/1683600652/488
489: デフォルトの名無しさん (ワッチョイ 847c-zIhc) [sage] 2023/07/15(土) 22:07:48.52 ID:BdK15TwX0 "HogehogeData"という名前で定義されたプログラム上の存在があったら その複数形はHogehogeDatasと呼ぶしかない 気持ち悪くてもしょうがないんだよ http://mevius.5ch.net/test/read.cgi/tech/1683600652/489
490: デフォルトの名無しさん (オイコラミネオ MM71-9/0y) [sage] 2023/07/15(土) 22:15:14.37 ID:UiYhW/dJM ファーストクラスコレクションにしないならその実装は不要だ 基本的に存在意味がない http://mevius.5ch.net/test/read.cgi/tech/1683600652/490
491: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 163e-MI76) [sage] 2023/07/15(土) 22:20:38.51 ID:oCSaktaG0 ワイはプログラミング言語 Scheme を使ってるんやが Scheme の仕様には datum という語が出てくる。 シリアライズの単位に関する概念なのでリストひとつも datum と (つまり単数形で) 呼ばれるのが ちょっとモニョッとする。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/491
492: デフォルトの名無しさん (JP 0H8a-PPvg) [] 2023/07/16(日) 08:28:58.24 ID:PzNRrLhAH どうでもいいことを突っ込んでる人いますけど Datas=>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Data=>aaaaaaaaaaaaaaaa と置換してください http://mevius.5ch.net/test/read.cgi/tech/1683600652/492
493: デフォルトの名無しさん (アウアウウー Sa3a-ZX0e) [] 2023/07/16(日) 09:51:34.88 ID:Po24/3Vva hogehogetoyukainanakamatati で解決 http://mevius.5ch.net/test/read.cgi/tech/1683600652/493
494: デフォルトの名無しさん (ワッチョイ 3279-EJzg) [sage] 2023/07/16(日) 16:16:15.89 ID:z7qY/utw0 powershellはJSONやxmlをその構造のまま扱えたりオブジェクト(PSCustomObject)にも変換できてpythonなんかより小奇麗に書けますよっと >>478だとif ($a.tsaro.age -eq $a.hanako.age) { ... という具合 http://mevius.5ch.net/test/read.cgi/tech/1683600652/494
495: デフォルトの名無しさん (ワッチョイ 3279-EJzg) [sage] 2023/07/16(日) 16:20:50.17 ID:z7qY/utw0 powershellはC#とシームレスに連携する手段もあってpowershellで苦手な再帰処理とかをC#コードに逃がしてpowershell機能を使いたい部分はActionやFuncから呼び出す事もできますよっと http://mevius.5ch.net/test/read.cgi/tech/1683600652/495
496: デフォルトの名無しさん (ワッチョイ 3279-EJzg) [sage] 2023/07/16(日) 16:21:58.50 ID:z7qY/utw0 よく見たらここC++スレだね 俺の事は忘れてください http://mevius.5ch.net/test/read.cgi/tech/1683600652/496
497: デフォルトの名無しさん (ワッチョイ 0928-rP6O) [sage] 2023/07/17(月) 18:33:54.32 ID:mG7BHGLy0 質問なのですがclass Datasというクラスがあってstd:::vector<Datas> vec((size_t)100); であるときに vec[k]の場所にn個の場所を空けたい(値は初期化済Datasオブジェクトなら何でも良い)場合どう書くべき? やっぱ手動でsz = vec.size(); vec.resize(sz + n);して既存要素vec[k..sz-1]を後ろ(vec[k+n..])にコピーする --- (1) のが最速? 仮にstd::vector<T>::insertを使うと Datas x; // (A) vec.insert(std::next(vec.begin(), k), n, x); // (B) になると思うのですが、なんか(A)で不必要にオブジェクトを1個構築せねばならないのと (B)で多分デフォルトコンストラクタではなくコピコンがn回呼ばれるのちょっち嫌 (なぜなら(1)のコピーとn個分の場所の確保に加えて、xをn回コピーするという余デフォルト構築よりも遅そうな処理をするから http://mevius.5ch.net/test/read.cgi/tech/1683600652/497
498: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 163e-MI76) [sage] 2023/07/17(月) 20:23:35.30 ID:YifLUjyU0 >>497 resize だって再配置 (に付随するコピー) の可能性はあるんで どっちでも大差ないんじゃないかな。 楽だと思うほうで書けばいいと思うよ。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/498
499: デフォルトの名無しさん (ワッチョイ 915f-9/0y) [sage] 2023/07/17(月) 21:47:09.31 ID:I9Lq0d6Q0 >>497 無駄なデフォルトコンストラクタやコピーを削って極力ムーブで済ませようと思ったら sz, k, n の大小関係ごとに場合分けして move_iterator 経由の insert とか使い分ければ いけそうだけど、面倒なわりに見合うほど効率改善しそうな気はしない。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/499
500: デフォルトの名無しさん (ワッチョイ 82f0-rqn1) [sage] 2023/07/17(月) 22:08:16.87 ID:kACYNrgv0 書き込みはそこまで遅くないから労力に見合わないだろうね http://mevius.5ch.net/test/read.cgi/tech/1683600652/500
501: デフォルトの名無しさん (スッップ Sd94-v8RM) [sage] 2023/07/17(月) 22:54:28.45 ID:vqJJKRdWd 速度を気にするなら実測しないと始まらないよ。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/501
502: デフォルトの名無しさん (ワッチョイ ae7a-CYkg) [sage] 2023/07/17(月) 23:18:54.88 ID:vGotTgNV0 リアルタイムOSのタスクのように無限ループが前提のとき TASK Task1() { while(1) { Obj1 obj = Device::GetObj(); : : } のようにobjを使う場合に、GetObjが内部でnewされていると、この作りではいつかメモリ不足になってしまいます。 そうなると自作でないクラスのメソッドは使う前にnewの有無をすべて調べなければならなくなるように思います。 実際はそんな不条理はないはずで、このような問題はどう対処するのがいいですか。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/502
503: デフォルトの名無しさん (ワッチョイ df01-L4gQ) [sage] 2023/07/17(月) 23:25:49.78 ID:CT+u9aWW0 >>502 自作でないクラスのメソッドは使う前には メソッドが消費するメモリを見積もらなければなりません 不条理でも何でも無い http://mevius.5ch.net/test/read.cgi/tech/1683600652/503
504: デフォルトの名無しさん (ワッチョイ 0928-rP6O) [sage] 2023/07/17(月) 23:34:05.22 ID:mG7BHGLy0 わかりました http://mevius.5ch.net/test/read.cgi/tech/1683600652/504
505: デフォルトの名無しさん (ワッチョイ 82f0-rqn1) [sage] 2023/07/17(月) 23:42:05.60 ID:kACYNrgv0 自作でないクラスでも使う関数がメモリ動的確保するかどうか普通は確認するぞ http://mevius.5ch.net/test/read.cgi/tech/1683600652/505
506: デフォルトの名無しさん (ワッチョイ 0928-rP6O) [sage] 2023/07/17(月) 23:46:35.71 ID:mG7BHGLy0 >>502 >GetObjが内部でnewされていると、この作りではいつかメモリ不足になってしまいます。 この懸念は普通の作りなら基本的に無用。基本的に問題無い (1) Obj1という型がポインタやハンドルではなくクラスの場合: objはwhile(1) { }のブロックの中で構築されるので ループの終わりでデストラクタが呼ばれる(破棄される)から、 Device::GetObj()が真っ当な作りならnewしたポインタをObj1のインスタンスobjに引き渡し、 Obj1クラスが真っ当な作りならobjが破棄されるときに引き渡されたポインタをdeleteする(ように作る からダングリングポインタは生じない(ようにできる (2) Obj1という型がポインタやハンドルの場合 確保したポインタやハンドルはいずれクローズせねばならない。 ループが次の繰り返しに入る前に確実にクローズすればよい http://mevius.5ch.net/test/read.cgi/tech/1683600652/506
507: デフォルトの名無しさん (ワッチョイ 0928-rP6O) [sage] 2023/07/17(月) 23:47:03.13 ID:mG7BHGLy0 基本的に、というのは(2)のケースで例外が生じたときクローズされずに抜けてしまう危険性があるのと、 (1)のケースにおいてもobj1の構築中に例外が生じた場合はきちんとデストラクトされない危険性がある。 Obj1のメンバがnewされるべき生ポインタの場合はこれは対処不能。生ポはやめてスマポにすればおk 詳しい話ははちみつ餃子氏に聞くと良い(マテ http://mevius.5ch.net/test/read.cgi/tech/1683600652/507
508: デフォルトの名無しさん (ワッチョイ 0928-rP6O) [sage] 2023/07/17(月) 23:58:52.90 ID:mG7BHGLy0 訂正orz、 誤: ループの終わりでデストラクタが呼ばれる(破棄される)から、(>>506 正: ループが次の繰り返しに入る前かループを抜ける際にデストラクタが呼ばれる(破棄される)から http://mevius.5ch.net/test/read.cgi/tech/1683600652/508
509: デフォルトの名無しさん (ワッチョイ 847c-8c0A) [sage] 2023/07/18(火) 00:04:09.43 ID:yoLqrsJ/0 >>502 必要ならそのGetObj()とやらのドキュメントにDevice::ReleaseXyz()とかDevice::ReleaseObj(obj1)とかobj1.release()とかを後で呼ぶように指示されてるはず それを怠ってリークさせたならお前がタコ そういう指示がないくせに勝手にリークするならそのライブラリがタコ そんだけの話 http://mevius.5ch.net/test/read.cgi/tech/1683600652/509
510: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 163e-MI76) [sage] 2023/07/18(火) 00:16:34.06 ID://OyAtPF0 そして使い方がドキュメント化されてないなら組織として問題がある。 が、そういう話はマ板で。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/510
511: 502 (ワッチョイ ae7a-CYkg) [sage] 2023/07/18(火) 00:38:24.79 ID:ibbV/iYr0 皆さんありがとう。 >>506 ブロックスコープは知りつつも、ループのブロックの場合はループ中は寿命が継続すると思っていました。 ループ時に毎度後始末されるなら安心です。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/511
512: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 163e-MI76) [sage] 2023/07/18(火) 01:05:37.37 ID://OyAtPF0 >>511 根拠。 https://timsong-cpp.github.io/cppwp/n3337/basic.stc.auto http://mevius.5ch.net/test/read.cgi/tech/1683600652/512
513: デフォルトの名無しさん (ワッチョイ 3279-EJzg) [sage] 2023/07/18(火) 02:17:55.25 ID:BpIlHiPB0 組み込み用途のライブラリで毎回ループ終端でデストラクタが呼ばれるように普通は設計しないから大丈夫 疑わしいならベンダーに問い合わせるかライブラリのソースを読めば解決 http://mevius.5ch.net/test/read.cgi/tech/1683600652/513
514: デフォルトの名無しさん (ワッチョイ b632-bpoS) [sage] 2023/07/21(金) 16:52:12.91 ID:PleiVI860 ちょいとコイツを見て欲しい。MSVC 14.36.32532でC++17かつセキュリティチェック無効(/GS-) https://i.imgur.com/XGfeBgH.png 最小コードで再現するために、コマンドライン文字列を変な形式として扱ってるのは置いといて 変数rSizeが、引数argcのスタック領域(ebp+8)に割り当てられるんだけど、こんな最適化ある? 確かにargcは用済みだが、レジスタやローカルスタックではなくcdeclのconst引数にストアする? http://mevius.5ch.net/test/read.cgi/tech/1683600652/514
515: デフォルトの名無しさん (ワッチョイ 5cfb-MzNP) [sage] 2023/07/21(金) 16:56:19.42 ID:LKM5BaGE0 そんなことよりbooost向けの技術書について教えてくれ http://mevius.5ch.net/test/read.cgi/tech/1683600652/515
516: 蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd94-5KMR) [sage] 2023/07/21(金) 18:04:39.14 ID:GfD0zzOHd そんな最適化あるよ。長期に渡って解析やってたらときどき出くわすよ。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/516
517: デフォルトの名無しさん (ワッチョイ 82f0-rqn1) [sage] 2023/07/21(金) 18:26:11.73 ID:eD9pKuA20 ADLについて初めて知ったのがboost::mathだった懐かしい http://mevius.5ch.net/test/read.cgi/tech/1683600652/517
518: デフォルトの名無しさん (ワッチョイ 847c-8c0A) [sage] 2023/07/21(金) 20:33:22.11 ID:9+qEAU5C0 観測可能な範囲で規格通りの挙動をする限りは、コンパイラ様はどんなバイナリを吐こうとどんな風にメモリやレジスタを扱おうと自由なのだ http://mevius.5ch.net/test/read.cgi/tech/1683600652/518
519: デフォルトの名無しさん (ワッチョイ a728-Nt2/) [sage] 2023/07/22(土) 11:54:04.91 ID:1sMnnOgP0 if文の条件式のところにがっつり文が書かれてゐる 最後の式の値が結果、とかますますPerl的世界に…… そのうち値を返す関数もreturn書かなくて良くなったりして…… http://mevius.5ch.net/test/read.cgi/tech/1683600652/519
520: デフォルトの名無しさん (ワッチョイ 473e-8suU) [sage] 2023/07/22(土) 12:15:40.55 ID:QLIAp4G50 >>519 任意の文を書けるわけではなく単純宣言に限られる。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/520
521: デフォルトの名無しさん (ワッチョイ 0710-XcQ/) [sage] 2023/07/22(土) 13:25:58.60 ID:uVFJqD+w0 うん。なんか「見てくれ」とか言うから見たけどサンプルとしてもしょーもないコードだなと思って 一度コメントしかけてやめた windowsのxx仕様 独自mainとか http://mevius.5ch.net/test/read.cgi/tech/1683600652/521
522: デフォルトの名無しさん (ワッチョイ 0710-XcQ/) [sage] 2023/07/22(土) 13:27:45.64 ID:uVFJqD+w0 自分が本当に答えを知りたいんじゃなくて、フレームというか、言い争いを起こして面白がりたいのかな、とか http://mevius.5ch.net/test/read.cgi/tech/1683600652/522
523: デフォルトの名無しさん (ワッチョイ a728-Nt2/) [sage] 2023/07/22(土) 15:21:09.39 ID:1sMnnOgP0 やっぱ void foo() { for (int i = 0; i < 100; i++) { .... } for (int ii = 0; ii < 100; ii++) { ... } ... for (int iiiiiiiiiiiiiiiiiiii = 0; iiiiiiiiiiiiiiiiiiii < 100; iiiiiiiiiiiiiiiiiiii++) { ... } } とかあってどのfor文でもループ変数のアドレスをとるような式が書かれていなかったら ローカル変数i、ii、...、iiiiiiiiiiiiiiiiiiが違うアドレスでなければならない理由は何も無いから 同じアドレスに割り当てになる可能性は高いと思う でデータフロー解析するステップではもはやブロックの構造とか渡ってないから そういう芸当をする同じロジックが>>514のようなことも当然するキモス ※ 個人の感想です http://mevius.5ch.net/test/read.cgi/tech/1683600652/523
524: デフォルトの名無しさん (ワッチョイ a728-Nt2/) [sage] 2023/07/22(土) 15:31:39.00 ID:1sMnnOgP0 ていうか補足、 void bar(int& x); というのがあって for (int i = 0; i < 100; i++) { bar(i); } for (int ii = 0; ii < 100; ii++) { bar(ii); } for (int iiiiiiiiiiiiiiiiiiii = 0; iiiiiiiiiiiiiiiiiiii < 100; ii++) { bar(iiiiiiiiiiiiiiiiiiii); } だった場合はこれは明示的にループ変数のアドレスをとっているわけではないが、 アドレスをとっているのと同じことなので i、ii、...、iiiiiiiiiiiiiiiiii同じアドレスに割り当てになる可能性は無くなると思う よかったなあ>>514、 http://mevius.5ch.net/test/read.cgi/tech/1683600652/524
525: デフォルトの名無しさん (ワッチョイ a728-Nt2/) [sage] 2023/07/22(土) 15:33:20.61 ID:1sMnnOgP0 しかしわからんのは void bar(const int& x); // const ! だった場合は for (int i = 0; i < 100; i++) { bar(i); } for (int ii = 0; ii < 100; ii++) { bar(ii); } for (int iiiiiiiiiiiiiiiiiiii = 0; iiiiiiiiiiiiiiiiiiii < 100; ii++) { bar(iiiiiiiiiiiiiiiiiiii); } だった場合はi、ii、...、iiiiiiiiiiiiiiiiiiが同じアドレスに割り当てられ得るのかどうかわわからん…… http://mevius.5ch.net/test/read.cgi/tech/1683600652/525
526: デフォルトの名無しさん (ワッチョイ a728-Nt2/) [sage] 2023/07/22(土) 15:41:23.03 ID:1sMnnOgP0 ゴメ自己解決しますたorz http://mevius.5ch.net/test/read.cgi/tech/1683600652/526
527: デフォルトの名無しさん (ワッチョイ 5f32-vVS+) [sage] 2023/07/22(土) 17:02:04.17 ID:lBkog51W0 スコープを抜けたローカル変数であれば順当な割り当てに思えるのだけど >>514が差し支えるのはコードインジェクションで引数を使い回すとかの横着 さりとてトップレベルのconstやvolatileは関数シグネチャに現れない訳で cdeclであろうと引数の寿命は関数を抜けるまでだろうから極めて妥当なのか? 14.27.29110ではやらず、スタック量は逆に増え…増えたから節約してるのか rbp+なら…いやそれも引数用スタック。C++20でvolatile非推奨化は有ったが volatile引数への代入も引数スタックへの書き込みと思っちゃならんのかな http://mevius.5ch.net/test/read.cgi/tech/1683600652/527
528: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 473e-pcwf) [sage] 2023/07/22(土) 18:07:10.54 ID:QLIAp4G50 >>527 言いたいことがあるなら独り言を書くんじゃなくて説明しろ。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/528
529: デフォルトの名無しさん (ワッチョイ bf42-vVS+) [sage] 2023/07/22(土) 18:59:44.13 ID:h3Z+iL0O0 >>528 どの部分ですか?rbp+のくだりならx64であればシャドウストアを呼び出し元が確保する事になっているので 引数へ代入以外でもrbp+に書き込まれるが、それにしたって引数の退避以外で行われるかという意味だけど またこの最適化が適正だとすれば引数へconstを指定しても それは引数の格納元が書き換わらない事を意味しない訳で volatileにしても引数スタックと同一視は出来ないのかなと http://mevius.5ch.net/test/read.cgi/tech/1683600652/529
530: デフォルトの名無しさん (テテンテンテン MM8f-TfYz) [sage] 2023/07/22(土) 19:01:30.20 ID:gun3EJ7PM >>519 resultは欲しいね。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/530
531: デフォルトの名無しさん (ワッチョイ 875f-UuLb) [sage] 2023/07/22(土) 19:08:50.81 ID:nQhdUCcc0 とりあえずcallee-savedとcaller-savedあたりでググってこい http://mevius.5ch.net/test/read.cgi/tech/1683600652/531
532: デフォルトの名無しさん (ワッチョイ 473e-8suU) [sage] 2023/07/22(土) 19:21:42.17 ID:QLIAp4G50 >>529 技術的な意味合いじゃなくてね、 それをのべてどうしたいのってことだよ。 疑問なのか?主張なのか?感想なのか? http://mevius.5ch.net/test/read.cgi/tech/1683600652/532
533: デフォルトの名無しさん (ワッチョイ bf79-mRrB) [sage] 2023/07/22(土) 23:38:20.21 ID:a8PwsTyx0 これだけは言っておく 文章が下手糞はプログラミングも下手糞ってことだ http://mevius.5ch.net/test/read.cgi/tech/1683600652/533
534: デフォルトの名無しさん (ワッチョイ dff0-lmMR) [sage] 2023/07/22(土) 23:53:10.56 ID:31w2/Kbx0 久々にヤバい変数名を見た >>525 このクソみたいな変数名はおまえが考えたのか http://mevius.5ch.net/test/read.cgi/tech/1683600652/534
535: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 473e-pcwf) [sage] 2023/07/23(日) 01:23:57.19 ID:3Ckw8KVE0 >>533 母語で説明できないようならプログラマには向いてないとかいう意味のことをダイクストラが言ってたな。 普通の人は母語が最も得意なはずだからそれで表現できないのに プログラミング言語でなら表現できるってことはないのは道理というものだ。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/535
536: デフォルトの名無しさん (スップ Sd7f-d+yq) [sage] 2023/07/23(日) 07:00:15.87 ID:TPcdF2Bwd 二、三個違えて大域変数切って火に油注ぎたくなるやつ http://mevius.5ch.net/test/read.cgi/tech/1683600652/536
537: デフォルトの名無しさん (ワッチョイ dff0-FYg4) [sage] 2023/07/24(月) 22:04:55.27 ID:7/Qlh6bu0 さんざん言われてるけど質問文きちんと書ける人はChatGPTで自己完結しちゃうんだよな http://mevius.5ch.net/test/read.cgi/tech/1683600652/537
538: デフォルトの名無しさん (ワッチョイ a728-Nt2/) [sage] 2023/07/25(火) 00:09:45.61 ID:ngER/Udx0 ゴメス>>524はリリースビルドしたら全部同じアドレスになったわ;;; やっぱ握った変数なりオブジェクトなりのアドレスを その変数なりオブジェクトなりの寿命が尽きた後に 使おうとするのは未定義動作であることだなあ、 http://mevius.5ch.net/test/read.cgi/tech/1683600652/538
539: デフォルトの名無しさん [sage] 2023/07/25(火) 03:57:53.89 ID:YH2RVZct0 俺には>>524がなんでそんな結論になるのか分からんのだが for内で i を宣言してるんだからfor のスコープを持つローカル変数だろ? int が4バイトの前提で言えば for 突入時に int i をスタック上に確保(スタックポインタを4バイトマイナス)して for 離脱時に int i の領域を解放(スタックポインタを4バイトプラス)する この繰り返しなんだから int i や int ii のアドレスが同じになることに疑問を挟む余地がないと思うんだけど 何がおかしいのか俺にはさっぱり分からん http://mevius.5ch.net/test/read.cgi/tech/1683600652/539
540: デフォルトの名無しさん (アウアウウー Sa2b-tGd7) [sage] 2023/07/25(火) 09:19:21.66 ID:k8WJtY+Ua for の i がローカルになったのは最近 グローバルに盛れるコンパイラ環境は巷に溢れていた http://mevius.5ch.net/test/read.cgi/tech/1683600652/540
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 462 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.025s