1 名前:デフォルトの名無しさん (ワッチョイ dfcf-HvS5) mailto:sage [2017/01/09(月) 14:49:27.56 ID:p96WJVyd0.net] 次スレを立てる時は本文の1行目に以下を追加して下さい !extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part128 echo.2ch.net/test/read.cgi/tech/1480172629/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.100【環境依存OK】 echo.2ch.net/test/read.cgi/tech/1478440682/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語) VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
784 名前:デフォルトの名無しさん (ワッチョイ f33c-u6wT) mailto:sage [2017/03/20(月) 18:08:39.79 ID:OlwkB3mR0.net] >>765 >科学系数値計算にしか効果はない ではなくて、「速度が必要な場面でも、実装する優先度は低い」ならわかる 自分が以前調べた限りでは、ETとSIMDを同時に使ってるものは無かった はっきり言って、速度が重要な局面かつSIMDが使えるマシンなのにまずSIMDを使わないというのは有り得ない けなすわけではないが、SIMD命令がある一般的なマシンにおける数値計算には、今あるETのライブラリはまともに使えんのじゃないか ていうか科学計算ならETより、SIMDやGPGPUを使う方が先 自分の場合はゲームでの計算なんで、CPUかつヒープじゃなくスタックを使う必要があるので その時点でuBlasやBlitzは選択肢から外れるんだわ
785 名前:デフォルトの名無しさん (ワッチョイ 7302-12+v) mailto:sage [2017/03/20(月) 18:31:45.48 ID:E6+3UOyx0.net] あらゆる面で最適化したオープンソースな数値計算ライブラリを作るような人なんて世界でもほぼ居ないだろ 数学と物理や化学とC++での数値計算に関する造詣が深くて、処理系やユースケースを想定して形にできなければいけない 金にならないし趣味にするには地味すぎる 論文が書ければいいけどライブラリ開発自体をメインにすることはできるのかどうかよくわからんし
786 名前:デフォルトの名無しさん (ワッチョイ f33c-u6wT) mailto:sage [2017/03/20(月) 19:35:01.25 ID:OlwkB3mR0.net] そういうライブラリはかなり難しいだろうね・・・ だから結局自分で作る必要があるんだわ(ETは労力やバグ回避がアレだけど、効果が無いわけではない)
787 名前:デフォルトの名無しさん (ワッチョイ cf6b-8YZg) mailto:sage [2017/03/20(月) 19:39:51.74 ID:d0t0+ba+0.net] お前らの作成したライブラリを配布したらさいつよじゃね?
788 名前:デフォルトの名無しさん (ワッチョイ 537b-gO1F) [2017/03/20(月) 19:44:06.12 ID:+YHRRlIg0.net] Eigenがexpression templateもSIMDも実装してたと思うけど
789 名前:デフォルトの名無しさん (ワッチョイ cf6b-8YZg) mailto:sage [2017/03/20(月) 19:47:48.92 ID:d0t0+ba+0.net] お前らってコード書くとき明示的にスコープ使う??
790 名前:デフォルトの名無しさん (ワッチョイ f33c-u6wT) mailto:sage [2017/03/20(月) 20:52:21.66 ID:OlwkB3mR0.net] >>770 あーー、そういえばあった・・・・w すまん大嘘こいてた https://ja.wikipedia.org/wiki/C%2B%2B_AMP ちなみにマイナーながらこんなんもある >>771 stdならstd::つけて、それ以外ならusing宣言でよく使うやつだけ取り込むかなぁ
791 名前:デフォルトの名無しさん (ワッチョイ ef8c-h49x) [2017/03/21(火) 00:17:02.18 ID:ooaEszBV0.net] Expression templateって右辺値参照ある今でも必要なの?
792 名前:デフォルトの名無しさん (ワッチョイ a38a-GEdz) mailto:sage [2017/03/21(火) 00:34:26.33 ID:WRmS2jUL0.net] 式テンプレートって遅延評価やそれを利用した最適化が主な目的だとおもうのだけど、それがなんで右辺値参照があるからいらなくなるの?
793 名前:デフォルトの名無しさん (ワッチョイ ef8c-h49x) [2017/03/21(火) 00:42:40.72 ID:ooaEszBV0.net] a = b + c + d の形式の時のコピー数減らすのが式テンプレートの主な功績だとしたら右辺値参照で同じように減らせると思ったんだけど、実際それ以上の最適化ってされてるの?
794 名前:デフォルトの名無しさん (ワッチョイ 7302-12+v) mailto:sage [2017/03/21(火) 00:59:40.31 ID:/NjqKBkb0.net] アセンブラで書くのが一番速い
795 名前:デフォルトの名無しさん (ワッチョイ f3e7-ajdi) mailto:sage [2017/03/21(火) 01:12:11.02 ID:3hTmI8gX0.net] KoDaIJiN
796 名前:デフォルトの名無しさん (ワッチョイ bf3a-lir9) mailto:sage [2017/03/21(火) 01:44:12.85 ID:2crVP7Yr0.net] 石を焼いてしまうのが、一番早い気がする
797 名前:デフォルトの名無しさん (ワッチョイ f33c-u6wT) mailto:sage [2017/03/21(火) 02:23:03.72 ID:wE8b83TD0.net] >>775 ヒープに確保するようなクラスの演算なら、コピーのコストはそうだね(推測だけど ただし>>761 に書いたようなレジスタ効率(a.f[0]の代入が終わったらストアして以降f[0]を無視できる)もある
798 名前:デフォルトの名無しさん (ワッチョイ 33e6-8FG5) [2017/03/21(火) 03:29:49.89 ID:+DL1LwCN0.net] >>778 それ速いけど早くない
799 名前:デフォルトの名無しさん (ササクッテロレ Sp97-GEdz) mailto:sage [2017/03/21(火) 11:41:46.69 ID:Ub2NtCH4p.net] >>775 たとえばeigenなんかは必要な要素だけ計算されるような工夫があるようだけど
800 名前:デフォルトの名無しさん (ワッチョイ 336e-8FG5) mailto:sage [2017/03/21(火) 12:20:28.06 ID:ovrpZx5v0.net] 全く理解してないし、今日初めて知ったんだけど 遅延評価といっても所詮静的なものだから こんなものはコンパイラが最適化を超がんばれ、って思う たぶん事の本質は演算の順番を変えることで (縦に計算するか、横に計算するか、みたいな?) 最適化がかかりやすくなったり速く動いたりできるかもね って事なんじゃないかと俺は勝手に思った ただ愚直に演算の順番を変えると記述性に問題が出てくるから それを防ぐテクニックなのかなーと よくわからないけど
801 名前:デフォルトの名無しさん (ワッチョイ 534f-v8EU) mailto:sage [2017/03/21(火) 12:35:09.71 ID:bH1u/9cj0.net] Expression templateの一時変数問題は ムーブコンストラクターで解決された問題だよね。
802 名前:デフォルトの名無しさん (ワッチョイ 737a-12+v) mailto:sage [2017/03/21(火) 12:36:27.24 ID:/NjqKBkb0.net] プログラムが扱いやすいように初期値を設定してやるのは人間の仕事
803 名前:デフォルトの名無しさん (ワッチョイ 336e-8FG5) mailto:sage [2017/03/21(火) 12:54:01.22 ID:ovrpZx5v0.net] 全く理解していない俺が言うのもなんだけど ムーブコンストラクタは関係ないと思う 演算順序を変えないことには何処かに一時的に計算結果を保存しておかないと ダメなことには変わりないのでは? tmp[0] = a[0] + b[0]; tmp[1] = a[1] + b[1]; r[0] = tmp[0] + c[0]; r[1] = tmp[1] + c[1]; と r[0] = a[0] + b[0] + c[0]; r[1] = a[1] + b[1] + c[1]; の違いじゃないかなー これで配列のサイズが1000とかだったらかなり差が出るんだろう ただ、普通にforループ書けば?って気もするが そこを演算子のオーバーロードでどうしても記述したいってのが 例の技術なのかと 俺には必要ないかなー 要素数の少ないベクトルはSIMD使うし、要素数の多い配列はループ回すし
804 名前:デフォルトの名無しさん (ワッチョイ 534f-v8EU) mailto:sage [2017/03/21(火) 13:04:15.57 ID:bH1u/9cj0.net] a[0] += b[0]; a[0] += b[1]; c[0] += a[0]; c[1] += a[1]; r[0]=c[0] r[1]=c[1] ムーブコンストラクターを使うとこうなる
805 名前:デフォルトの名無しさん (ワッチョイ 336e-8FG5) mailto:sage [2017/03/21(火) 13:13:33.00 ID:ovrpZx5v0.net] やだー それ、aとcが破壊されているじゃないですかーー r=a+b+c; と同等のコードになりませんよ? あなたのは a+=b; c+=a; r=c;ですが そもそも「+=」で破壊していく方針なら、何にも新しくコンストラクトしないんだから これまたムーブコンストラクタ関係ないじゃないですかーー どこからムーブコンストラクタが出てくるんですか? もっとC++勉強してくださいよー
806 名前:デフォルトの名無しさん (ワッチョイ 336e-8FG5) mailto:sage [2017/03/21(火) 13:23:51.34 ID:ovrpZx5v0.net] r = a + b + c を計算しようと思うと、これはr = (a + b) + c に分解されるだろうから 根本的に(a + b)の結果を保存しておく一時変数がいる レジスタに配置されるかもしれないとかそういうことはおいておいて とりあえず一時変数がいる で、a,b,c,rがベクトルだった場合、一時変数もベクトルになる これはあまり美味しくない場合がある、ということで 各要素にばらして要素ごとにr = (a + b) + cを実行する そうすると一時変数はスカラーになる しかし記述性に難が出るので、それを何とかしようとした ↑これが基本的な要点かと
807 名前:デフォルトの名無しさん (ワッチョイ 534f-v8EU) mailto:sage [2017/03/21(火) 13:29:00.21 ID:bH1u/9cj0.net] 間違えた tmp[0]=a[0] + b[0]; tmp[0]=a[1] + b[1]; tep[0]+=c[0]; tep[1]+=c[1]; r[0]=temp[0] r[1]=temp[1] 一時変数が一個で良いってことだな aかbが右辺値なら1個だ
808 名前:デフォルトの名無しさん (ワッチョイ 534f-v8EU) mailto:sage [2017/03/21(火) 13:30:57.12 ID:bH1u/9cj0.net] また間違えた、aかbが右辺値なら0個だ
809 名前:デフォルトの名無しさん (ワッチョイ f33c-u6wT) mailto:sage [2017/03/21(火) 13:32:10.85 ID:wE8b83TD0.net] >全く理解していない俺が言うのもなんだけど どこが全く理解していないのかと小一時間w ただムーブ代入演算子やコンストラクタがあれば、”ヒープに要素を確保するクラス”限定で ヒープ確保や代入命令のコストがポインタのすげ替えだけで済むのはある(>>779 ) でもスタックに確保するような固定長のベクトルとかだと、>>785 の通り代入命令の回数が バカにならないので結構差が出てくる 「C++の演算子オーバーロードは遅い」なんて言われることがあるけど、その理由がこれだと思う 演算子オーバーロードが遅いんではなく、計算結果を戻り値で返す関数が遅い (これは計算結果を保証するためなのかどうしようもないんだろうけど) なのでそれを回避するために算術代入使おう、という論もある ただし遅いと言ってもFortranとC/C++の差のレベルなんでアレだけど・・・・ 多分愚直な演算子で書いても、全てインライン展開されれば最適化でベストなコードになると思うんだけど・・・(誰か知ってる人頼む
810 名前:デフォルトの名無しさん (ワッチョイ 534f-v8EU) mailto:sage [2017/03/21(火) 13:32:18.98 ID:bH1u/9cj0.net] もう一個訂正tmp =temp,tem,tmp
811 名前:デフォルトの名無しさん (ワッチョイ f33c-u6wT) mailto:sage [2017/03/21(火) 13:37:29.55 ID:wE8b83TD0.net] >>789 右辺値についてだいぶ誤解してないか? ムーブコンストラクタ/代入演算子は引数が右辺値である場合の実装を分けられるだけやで
812 名前:デフォルトの名無しさん (ワッチョイ 534f-v8EU) mailto:sage [2017/03/21(火) 13:41:08.81 ID:bH1u/9cj0.net] 実際に tmp[0]=a[0] + b[0]; tmp[0]=a[1] + b[1]; tep[0]+=c[0]; tep[1]+=c[1]; r[0]=temp[0] r[1]=temp[1] 上のと同等の演算が r[0] = a[0] + b[0] + c[0]; r[1] = a[1] + b[1] + c[1]; で出来るというわけで実際に 3回に計算するわけじゃないよ
813 名前:デフォルトの名無しさん (ワッチョイ f33c-u6wT) mailto:sage [2017/03/21(火) 13:41:36.76 ID:wE8b83TD0.net] 訂正 Xヒープ確保や代入命令のコストがポインタのすげ替えだけで済む ○最後の代入演算子で発生するヒープ確保や代入命令のコストがポインタのすげ替えだけで済む a, b, cの演算結果は依然としてコストあるね
814 名前:デフォルトの名無しさん (ワッチョイ 336e-8FG5) mailto:sage [2017/03/21(火) 15:17:50.73 ID:ovrpZx5v0.net] そーゆーことでしょうな むしろ内部でstd::vectorとか使ってベクトル表現している方が 要素ごとにバラして計算するメリットが出るだろうね 計算途中の一時変数がstd::vectorになるのとスカラになるのとでは 全然違うというか話にならないからね あと > ○最後の代入演算子で発生するヒープ確保や代入命令のコストがポインタのすげ替えだけで済む だけど、たぶんだけどstruct vec{ int x,y,z; };みたいなやつだと 最後の代入はコンパイラの最適化で消えてなくなるだろうから気にしなくてもよいはず C++にmoveホゲホゲが出来る以前からあった古来からの基本的な最適化だったはず まぁoperator=を定義して余計なことしてたらその限りじゃないかもしれんが
815 名前:デフォルトの名無しさん (スプッッ Sddf-8YZg) mailto:sage [2017/03/21(火) 16:21:56.57 ID:rDA5FTfNd.net] umdhの結果でleak検索して出てこなかったらメモリリークしていないって判断して問題ない??
816 名前:デフォルトの名無しさん (ワッチョイ f33c-u6wT) mailto:sage [2017/03/21(火) 18:56:32.83 ID:wE8b83TD0.net] >>796 RVOのことかな?そういえば完全に忘れてた・・・ 確かoperator =を定義していようが副作用があろうが、コンパイラは勝手に コンストラクタや代入演算子の呼び出しを減らしていい、って感じだったと思うんだけど もしかして同じ機能のコンストラクタがあるならoperator =は無駄??
817 名前:デフォルトの名無しさん (ワッチョイ bf90-tpgq) mailto:sage [2017/03/21(火) 22:33:32.67 ID:QxtkUNUp0.net] map<T,U> map; とか for (auto pair : map) というのをつい手癖でやってしまうのですが こういう名前の付け方はやめたほうがいいですか?
818 名前:デフォルトの名無しさん (ワッチョイ 336e-8FG5) mailto:sage [2017/03/21(火) 22:47:54.58 ID:ovrpZx5v0.net] 大前提としてチームで開発しているならチームのリーダーに質問してください 自分一人で書いてるなら変数名なんかなんでもよいよ 自分で書いたコードでも一年たったら他人が書いたコードのように読めない っていう人もいるけど、実際には普通に読めるから変数名は思い付きのテキトーでよい 型名をもじってそのまま変数名にするってのは俺もよくやる 実際変数名は本当に何でもよくて なぜならスコープが狭かったり、クラスのプライベートメンバだったりして ごちゃごちゃになったりしないから 問題はクラス名と関数名で、こちらはいつも悩む
819 名前:デフォルトの名無しさん (ワッチョイ bfcc-UNkP) mailto:sage [2017/03/21(火) 22:53:34.07 ID:BqDV4BtF0.net] やめたほうがいい あとあと混乱するから
820 名前:デフォルトの名無しさん (スップ Sddf-Ma5U) mailto:sage [2017/03/21(火) 22:53:51.11 ID:chOyeLILd.net] あとはインタフェースの一部としての引数名かな。 総じて.cppファイルにだけ書かれる名前はテキトー
821 名前:デフォルトの名無しさん (ワンミングク MM5f-W3uL) mailto:sage [2017/03/21(火) 23:38:01.75 ID:XhVovTkQM.net] >>799 mapはデータ構造だろ 変数名はそれが何を格納してるかを表してなきゃダメだと思うけど
822 名前:デフォルトの名無しさん (ワッチョイ 03b4-w0Gz) mailto:sage [2017/03/21(火) 23:45:02.12 ID:5oluTi0x0.net] >>803 は健常者
823 名前:デフォルトの名無しさん (ワッチョイ bf90-tpgq) mailto:sage [2017/03/21(火) 23:57:16.03 ID:QxtkUNUp0.net] >>800-804 ありがとうございます。くだらぬ質問でしたね、すみません とりあえず狭いスコープの一時変数用途では map<T,U> m; for (auto p : m) みたいにしておきます
824 名前:デフォルトの名無しさん (ワッチョイ 3fd1-q0jq) mailto:sage [2017/03/21(火) 23:59:23.77 ID:eniBTwk40.net] やめた方がいいですか?なんて聞いてる時点で本人の中でも既に答えは出ているのでは
825 名前:デフォルトの名無しさん (ワッチョイ 737a-12+v) mailto:sage [2017/03/22(水) 00:10:41.47 ID:kq8u5G9J0.net] 使い捨てならアンダーバー付けろ
826 名前:デフォルトの名無しさん (ドコグロ MM57-3fK7) mailto:sage [2017/03/22(水) 06:47:53.98 ID:svIchgSfM.net] >>799 どちらもスコープが狭ければいいと思う 特に pair の方は for 文でよく使われる i みたいなもんだから俺もよくやる map の方はたいていスコープも広いし中身を表す名前にした方が分かりやすいと思う 型名と同じ名前はどうよ? って話なら俺個人的には問題ないでしょって思うけどそう思わない人の方が多いような気がする
827 名前:デフォルトの名無しさん (ワッチョイ f384-ajdi) mailto:sage [2017/03/22(水) 07:01:10.32 ID:2VeNeFOl0.net] for(auto&o : c)て感じでやってるなぁ。 oはobjectのo。
828 名前:デフォルトの名無しさん (スップ Sddf-rwfr) [2017/03/22(水) 07:36:14.20 ID:BzP+Rc7Ad.net] 変数名に型情報をのせるなマイクロソフトじゃあるまいし
829 名前:デフォルトの名無しさん (オッペケ Sr97-w0Gz) mailto:sage [2017/03/22(水) 07:43:37.16 ID:l4RQ+gMQr.net] 別にのせてもいいけど、型でしかその概念
830 名前:捉えられない人にマトモな設計は難しい int intTypeVar=-1; [] [ここ壊れてます]
831 名前:デフォルトの名無しさん (ワッチョイ 534f-v8EU) mailto:sage [2017/03/22(水) 08:29:35.78 ID:IQHE94uk0.net] 変数名に型を載せないほうがカッコいいと思ってるの? それって逆にカッコ悪いと思う。
832 名前:デフォルトの名無しさん (スプッッ Sddf-8YZg) mailto:sage [2017/03/22(水) 08:42:36.10 ID:rgAwiSmKd.net] 変数名に型情報いるか?って話だな そんな情報載せようとするぐらいなら変数名や関数名に拘れ
833 名前:デフォルトの名無しさん (スプッッ Sddf-rwfr) [2017/03/22(水) 08:52:48.82 ID:gPjbW80sd.net] メンバのm_ と同じくらい無意味というか害悪
834 名前:デフォルトの名無しさん (ワッチョイ 53bf-tW1y) [2017/03/22(水) 08:59:06.14 ID:iUoKjy2X0.net] >>814 m_ は好きだけどな。 手で握られてる感じが。
835 名前:デフォルトの名無しさん (ワッチョイ 534f-v8EU) mailto:sage [2017/03/22(水) 09:01:02.66 ID:IQHE94uk0.net] 違いの分かる男 (スプッッ Sddf-rwfr)
836 名前:デフォルトの名無しさん (スプッッ Sddf-8YZg) mailto:sage [2017/03/22(水) 12:11:09.58 ID:rgAwiSmKd.net] フルページヒープしようとしてるがうまくつかえんぞなんだこれ gflag設定して対象ファイル実行するだけでなんとかなるんちゃうのか
837 名前:デフォルトの名無しさん (ワッチョイ 3392-8YZg) mailto:sage [2017/03/22(水) 18:09:01.13 ID:dqBQr4XV0.net] メモリ管理ってどうやってしてる? テスト設計で必要なのだが調べても情報が少なくて使い方もあやふやで困ってる 自分のコードならまだしも人のコードだから品質保証するために必要なので困ってる助けて
838 名前:デフォルトの名無しさん (ドコグロ MM1f-vDuW) mailto:sage [2017/03/22(水) 19:28:52.80 ID:6SOT+CpTM.net] c++の場合、設計段階できっちりメモリ管理しないと死ぬ。 テスト段階だとどうだろ?どんなツールがおすすめかね?
839 名前:デフォルトの名無しさん (ワッチョイ 3392-8YZg) mailto:sage [2017/03/22(水) 19:40:51.16 ID:dqBQr4XV0.net] >>819 昔からのコードだから俺にはなんとも言えないんだなぁ... タスクマネージャー開いて無限ループさせてたら地味にメモリ増えていくからたぶんリークなりメモリ破壊なりなんかしてそうなんだ
840 名前:デフォルトの名無しさん (ワッチョイ f3c8-tpgq) mailto:sage [2017/03/22(水) 19:50:51.39 ID:E1Td5RgZ0.net] >>820 どこでリークが発生していて、どこでfreeするべきかをツールで発見したいって事? そりゃ無理だろ。 それが出来ないからGC言語に逃げているわけだし、 それが出来ればRAIIすらゴミになるでしょ。
841 名前:デフォルトの名無しさん (ワッチョイ cf1f-9jmm) [2017/03/22(水) 19:54:38.25 ID:0C1B3gPp0.net] メモリ管理はPHPとかのほうがムズい。 設計時でもコード書くときでも実動時でもメモリ消費を制御するのはムズい。正常動作でも想定外が起こる。 消費量が判ったところで実働時に減らすことはムズい。 "php メモリ 画面 真っ白 メモリ"とか定番ネタ
842 名前:デフォルトの名無しさん (ワッチョイ 3392-8YZg) mailto:sage [2017/03/22(水) 20:09:07.97 ID:dqBQr4XV0.net] >>821 いやそこまでは出来なくても良い ただ品質として確保したいだけ リークがあるかないかを判断できればおけおけ
843 名前:デフォルトの名無しさん (ドコグロ MM57-3fK7) mailto:sage [2017/03/22(水) 20:13:28.89 ID:svIchgSfM.net] >>818 環境がわからんからアドバイスのしょうがないんだが ソースがあってビルドできるならとりあえず valgrind とかで調べたら? valgrind.org/
844 名前:デフォルトの名無しさん (ワッチョイ 336e-8FG5) mailto:sage [2017/03/22(水) 20:15:04.43 ID:i8R0t7KQ0.net] それならプログラム終了時にすべてのメモリが解放されたかチェックすればOK
845 名前:デフォルトの名無しさん (ワッチョイ 3392-8YZg) mailto:sage [2017/03/22(水) 20:15:57.49 ID:dqBQr4XV0.net] >>824 ふぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉまた英語か... 環境と言えるのはなんだろ visualstudio2008 Windows7 テストしたいのはdll
846 名前:デフォルトの名無しさん (ワッチョイ bf67-lir9) mailto:sage [2017/03/22(水) 20:25:44.20 ID:rzLKjPpj0.net] >>826 昔だったら、ぴゅりふぁい っていうツールがあったけど。
847 名前:デフォルトの名無しさん (ワッチョイ 737a-12+v) mailto:sage [2017/03/22(水) 20:26:09.25 ID:kq8u5G9J0.net] まともな開発環境なら名前以外から変数のスコープと型情報くらい分かるはずだよね
848 名前:デフォルトの名無しさん (ワッチョイ f3c8-tpgq) mailto:sage [2017/03/22(水) 20:26:35.66 ID:E1Td5RgZ0.net] >>826 > テストしたいのはdll それって単にdllの呼び方間違えているだけじゃね? dll
849 名前:呼んだ直後で片っ端からfreeしてみたら直るんじゃね? なおVS2008にはプロファイラが付いてないが、最新VSには付いていたはず。 (俺は使ったこと無いけど) だからとりあえず最新VSでコンパイル通るか試して、そっちでデバッグするのも手だよ。 [] [ここ壊れてます]
850 名前:デフォルトの名無しさん (ワッチョイ cf1f-9jmm) [2017/03/22(水) 20:31:15.79 ID:0C1B3gPp0.net] メモリ確保をすべて乗っ取って動作させてログ吐き出すやつでいいのでは?
851 名前:デフォルトの名無しさん (ワッチョイ 336e-8FG5) mailto:sabe [2017/03/22(水) 20:35:57.13 ID:i8R0t7KQ0.net] お前ら意地悪だな VisualStudioならプログラム終了時にすべてのメモリが解放されたか チェックしてくれるDebug版お便利mallocがあるだろ _CrtSetDbgFlag で検索してみるとよい あと、ヒープ破壊を心配しているようだが Debug版mallocにはヒープ破壊検出機能もついてる もしオーバーランしていたりしたらfree時に怒られる
852 名前:デフォルトの名無しさん (ワッチョイ cf1f-9jmm) [2017/03/22(水) 20:36:51.91 ID:0C1B3gPp0.net] これとか LinuxC | GC メモリ周りの基本的操作とテクニック Boehm GC 問題のあるプログラム #include <stdio.h> #include <stdlib.h> void memory_test(void){ char *p; p = malloc(1024); } int main(void){ memory_test(); return 0; } 実行するとエラーも出ず問題なく実行できます。 これは当然で、プログラム終了時にはOSがすべての資源(メモリやファイルディスクリプタ等)はすべて回収してくれるからです。 しかしこれは問題です。 Boehm GCの基本的な使い方 ではこのプログラムでBoehm GCを使います。 Boehm GCはmalloc(3)、realloc(3)の代わりにGC_malloc(),GC_malloc_atomic(),GC_realloc()を使います。 malloc(3)、reallc(3)、free(3)をそれぞれ置き換える作業だけです。 linuxc.info/memory/gc/
853 名前:デフォルトの名無しさん (ワッチョイ 3392-8YZg) mailto:sage [2017/03/22(水) 20:37:32.91 ID:dqBQr4XV0.net] >>827 可愛らしいな聞いたことない >>829 dllの呼び方間違えてるとは? 呼び出すドライバについては片っ端からのfreeはちゃんとしてあるぜ 新しい環境については会社での統一環境だから移行できんな...
854 名前:デフォルトの名無しさん (ワッチョイ 3392-8YZg) mailto:sage [2017/03/22(水) 20:41:03.02 ID:dqBQr4XV0.net] >>831 ちょっと調べてみる 一応確認だけどもdll呼び出すドライバの最後にちょろっとやればええんかな >>832 なんぞこれ
855 名前:デフォルトの名無しさん (ワッチョイ bf67-lir9) mailto:sage [2017/03/22(水) 20:41:15.04 ID:rzLKjPpj0.net] dllのソースもってるのかな?
856 名前:デフォルトの名無しさん (ワッチョイ 336e-8FG5) mailto:sage [2017/03/22(水) 20:45:10.10 ID:i8R0t7KQ0.net] ああ、dllのソースがないとだめだよ dllのソースがないのにメモリリークが有るか無いかしらべるのは さすがにムリゲーだよ
857 名前:デフォルトの名無しさん (ワッチョイ 3392-8YZg) mailto:sage [2017/03/22(水) 20:45:12.77 ID:dqBQr4XV0.net] >>835 持ってる むしろそのdllを今書き換えてるところかな んでテストする段階で悩んでるところです
858 名前:デフォルトの名無しさん (ワッチョイ f3c8-tpgq) mailto:sage [2017/03/22(水) 21:00:54.62 ID:E1Td5RgZ0.net] >>837 とりあえず仮定を確認しよう。 1. dll以外の部分では今のところリークしていない 2. dllと組み合わせるとリークする んだよな? そして書き換えているのは本体ではなく、dllなのか? (これは俺の想定と逆だった) だったらお前がバグ入れただけじゃん。
859 名前:デフォルトの名無しさん (ワッチョイ 3392-8YZg) mailto:sage [2017/03/22(水) 21:06:53.51 ID:dqBQr4XV0.net] >>838 1 2 両方とも正しい んでもって俺が加えたのは型を修正しただけだからたぶん関係ない と言うか関係ない おそらく以前からある現象で以前のdllを利用しても同じ感じになる 2については組み合わせるとと言うよりテストのための実行ファイルを適当に作っただけかな 今回触れてない部分が大半なんだけどバージョンアップするから メモリ破壊なりも調べる観点が必用で umdhやらcrtデバッグやらページヒープやら調べてるんだけど...ってところ
860 名前:デフォルトの名無しさん (ワッチョイ cf1f-9jmm) [2017/03/22(水) 21:34:34.94 ID:0C1B3gPp0.net] Boehm GCはオールCのはずでwindowsでもその他でも動作するし昔から定番だったはず。 だれもこれだしてないが・・
861 名前:デフォルトの名無しさん (ワッチョイ 5375-gO1F) [2017/03/22(水) 21:38:38.83 ID:sj71GTBZ0.net] Linux上でWine+valgrindやろ やったこと無いけど。
862 名前:デフォルトの名無しさん (ワッチョイ f3c8-tpgq) mailto:sage [2017/03/22(水) 22:27:39.33 ID:E1Td5RgZ0.net] >>839 それは業務でやってるんだろ? だったらまず、「以前の本体と以前のdllの組み合わせで、今のテスト」を行って、 リークしているようなら上司にどうするか聞いた方がいい。 このリークを直せというのは確実に手こずる。 そして逆に言えば、今それで出荷出来ているんならそれでも使い物になるんだよ。 だからリークがある状態で新機能付けて出荷も出来るはず。 ちなみに64bitアプリか?だったらリークはとりあえず無視する手もあるぞ。
863 名前:デフォルトの名無しさん (ワッチョイ bf67-lir9) mailto:sage [2017/03/22(水) 23:03:40.64 ID:rzLKjPpj0.net] 期末のこの時期に、メモリリーク。。こわい。。 UMDH調べてるなら、方向はいいとおもうけど。 上に、あげといた方がいいだろな。 時間食うかもしれん。 メモリ壊してると、動作不定になるからな。
864 名前:デフォルトの名無しさん (ワッチョイ 63b7-rEFK) mailto:sage [2017/03/23(木) 00:17:11.61 ID:oAoB0YCS0.net] ttps://vld.codeplex.com なんかで調べてたときはこれ使ってたな。 めちゃくちゃ遅くなるけど。
865 名前:デフォルトの名無しさん (ブーイモ MM4a-TrMc) mailto:sage [2017/03/23(木) 03:06:19.64 ID:52JJY4k+M.net] >>839 バグ修正は「おそらく」「たぶん」とかいう自信のない根拠を持たずに チマチマ地道に調べて積み重ねると早く解決するよ
866 名前:デフォルトの名無しさん (ワッチョイ 9375-iMo4) [2017/03/23(木) 03:37:19.31 ID:mYb1ScGd0.net] Linuxでも動かせるならvalgrindが最も簡単かつ実効速度以外最強なんだけどね。 Windowsのメモリエラー検出ツールはコレっていうのがない。
867 名前:デフォルトの名無しさん (ドコグロ MMe2-hXJm) mailto:sage [2017/03/23(木) 06:43:06.01 ID:HovpjxiMM.net] valgrind なんてオープンソースだから誰かが Windows にポーティングしてるかと思ったら Windows is not under consideration because porting to it would require so many changes it would almost be a separate project. (However, Valgrind + Wine can be made to work with some effort.) ということなのね、残念
868 名前:デフォルトの名無しさん (スプッッ Sde3-2Cpe) mailto:sage [2017/03/23(木) 07:14:51.92 ID:ne+fmuh4d.net] >>842 後だしばかりですまんが32→64bitアプリへの移行中 64bitにしたさいにメモリ破壊なりがないかを確認するためにumdhやらを使おうってなってる あくまでリークしてるかも?ってのは俺がタスクマネージャー見ただけでの予測である
869 名前:デフォルトの名無しさん (スプッッ Sde3-2Cpe) mailto:sage [2017/03/23(木) 07:19:49.58 ID:ne+fmuh4d.net] おお...途中で送ってしまった >>845 それはわかってるんだけどどうにしろ 移行した影響があるかないかも含めて確認するために必要なこととしてツールで保証したいってのがある んで調査中でオススメのないかな?←今ここ ページヒープってのを見付けたんだがあからさまにメモリ破壊してるやつでも検出できないしこれ使ってる人居たら何に対応できるか教えてくれんか....
870 名前:デフォルトの名無しさん (ワッチョイ fe1f-sIi0) [2017/03/23(木) 08:52:11.56 ID:UkDqG0iw0.net] ソースコードがあるなら汎用的なBoehm GCでいいだろうと
871 名前:デフォルトの名無しさん (ワッチョイ 9375-iMo4) [2017/03/23(木) 09:19:11.19 ID:mYb1ScGd0.net] 俺はつかったことないけど dynamorio.org とか 金出せるなら Insure++ってやつとか >>850 メモリリークしか検出出来ないでしょ
872 名前:デフォルトの名無しさん (ワッチョイ aa67-QN42) mailto:sage [2017/03/23(木) 09:23:00.74 ID:63eMbsST0.net] >>849 ツールで保証したい っていうなら、>>850 が正しいかと。。
873 名前:e-72yv) mailto:sage [2017/03/23(木) 13:57:08.14 ID:FwJwtm3q0.net] ツールでメモリリークがないことを保証したいってだけなら VC++のランタイム付属のやつで十分だろ メモリ破壊が有ったかどうかも調べてくれるし こういったものが標準でついていて みんな空気のように標準的に使っているから 実際問題メモリリークはめったに起きないんだよ もしあったらプログラム終了時に教えてくれるからね だからメモリリークに対してはそんなに騒がれない 付属のやつで十分な品質を保証できるから たまーにしか通らないパスでメモリリークが発生していた場合など メモリリークの発見が遅れることはあるけど まぁ通ってないパスがある時点でテストが十分でないということだし 一か月に一回ほどの頻度でメモリリークするぐらいは別に問題ないという考え方もある ・・・っていうのもあって、まぁ付属の検出ツールで大体の品質は出る それよりはハンドルやGDIなどのOSリソースのリークが怖くて こちらは如何なるツールを使っても検出不可能で タスクマネージャなどで変にハンドルが増えてないかなど 地道に調べるしか方法がない だからハンドルなどは生で使わずにクラスにラップして使うのが通常だが 題意のDLLがどういう風になっているかは俺は知らん もしリークが発生してしまったらメモリリークより深刻な事態になる メモリよりもOSのリソースの方が貴重で制限が厳しいから むしろこっちのほうを気にすればよいのにと思ってしまう メモリリーク対策などVC++付属のやつに任せてしまってさ
874 名前:デフォルトの名無しさん (ワッチョイ be6b-72yv) [2017/03/23(木) 14:02:35.67 ID:xx3Et9SY0.net] ツールに依存しきって分岐網羅とかやらなくなってるとしたら それはツールによって腐ったとしか言いようがない
875 名前:デフォルトの名無しさん (ワッチョイ 2b6e-72yv) mailto:sage [2017/03/23(木) 14:11:13.36 ID:FwJwtm3q0.net] ちなみにリソースリークが発生していて 結果としてメモリ使用量がどんどん増えていくってのは有りうるよ タスクマネージャで調べたら使用メモリが増えていってる感じだったってことだけど それだけだと何が原因か、はたまた問題ないのか、難しいよ メモリ使用量を見るだけじゃダメで、ハンドル使用量etcも確認しないとね これはマナーとしてWindowsソフト開発者は絶対するよ リソースリークなんかしてたらむちゃくちゃ恥ずかしいし迷惑だから あと、リソースリークはメモリリーク検出ツールでは検出できないからね それから、もしリソースリークが発生していることが分かっても どこで発生しているか突き止めるのはメモリリーク以上に難しい、とは言っておく
876 名前:デフォルトの名無しさん (ワッチョイ 2b6e-72yv) mailto:sage [2017/03/23(木) 14:26:25.40 ID:FwJwtm3q0.net] テストを走らせるときにVC++のメモリリーク検出機能をONにしておくと テスト終了時にメモリリークが発生したかどうか知らせてくれるというだけで メモリリーク検出ツールを使うことと テストの網羅が不十分なこととは関連性がないよ メモリリーク検出ツールを使ったから、何か油断して テストの網羅が不十分になるっていう理論の展開は 一般的におこらないというか、無理がある むしろテストを網羅しないとメモリリークを検出できないわけで
877 名前:デフォルトの名無しさん (ワッチョイ 9375-iMo4) [2017/03/23(木) 14:28:17.35 ID:mYb1ScGd0.net] valgrindではunixシステムの主要リソースであるfile descriptorのリークも検出出来るけどな
878 名前:デフォルトの名無しさん (ワッチョイ be6b-72yv) [2017/03/23(木) 14:29:11.39 ID:xx3Et9SY0.net] おまえさっき、こう言ってたじゃん > たまーにしか通らないパスでメモリリークが発生していた場合など > メモリリークの発見が遅れることはあるけど
879 名前:デフォルトの名無しさん (ワッチョイ 2b6e-72yv) mailto:sage [2017/03/23(木) 14:43:08.69 ID:FwJwtm3q0.net] それはテストが不十分ゆえに発生した問題であって メモリリーク検出ツールを使った事とは全く関係がない >まぁ通ってないパスがある時点でテストが十分でないということだし と書いておいただろ
880 名前:デフォルトの名無しさん (スプッッ Sdea-QN42) mailto:sage [2017/03/23(木) 15:03:37.80 ID:ixe949V5d.net] 無いことを保証するってのは、こわい文言だね。 dll内で、メモリ確保、解放してるところを、共通の関数に置き換えて、その上で、gcにおきかえかなぁ。
881 名前:デフォルトの名無しさん (ワッチョイ be6b-72yv) [2017/03/23(木) 15:45:13.38 ID:xx3Et9SY0.net] >>859 関係大ありだよ 通ってないパスのバグが検出できないツールを使っているのに たまーにしか通らないパスをテストしないのは ツールを過信してる証拠だろうが
882 名前:デフォルトの名無しさん (ワッチョイ 2b6e-72yv) mailto:sage [2017/03/23(木) 16:33:59.49 ID:FwJwtm3q0.net] いや、意味不明なんだが 通ってないパスのメモリリークが検出できないのは当たり前で そんな変な勘違いする人はいないし テストの網羅度が下がる理由はもっと別要因の別問題の別観点であり メモリリーク検出ツールを過信したからとか意味不明 「俺はメモリリーク検出ツールを使っているからテストの網羅度が低くてもOKだぜ」 ってシナリオがもうありえないっつーか、前提がおかしいだろ メモリリークしかテストしないかのような前提はおかしい メモリリークさえなければ出力が間違っててもOK、とはならないだろ となれば当然テストするだろ、リーク検出ツールの有無に関係なく むしろ、リークの有る無しより、出力のほうが大事だろ、そっち優先 そのためのテストであり、パスの網羅度が高ければ結果的にリーク検出度も高いというだけ どのぐらい完璧なテストをするか、すべてのパスを網羅できるか、は メモリリーク検出ツールを使うかどうかとは関係ない、また別の現実問題
883 名前:デフォルトの名無しさん (スプッッ Sdea-QN42) mailto:sage [2017/03/23(木) 16:44:15.11 ID:ixe949V5d.net] お、おまいら、そうおこるなよ。 >849 から、つづきもないし、上手く行っていることを祈ろう。
884 名前:デフォルトの名無しさん (ワッチョイ be6b-72yv) [2017/03/23(木) 17:00:53.12 ID:xx3Et9SY0.net] > 通ってないパスのメモリリークが検出できないのは当たり前で だったらツールでは防げないバグの話にツールを持ち出すこと自体が大間違いだな
885 名前:デフォルトの名無しさん (ワッチョイ 2b6e-72yv) mailto:sage [2017/03/23(木) 17:33:17.98 ID:FwJwtm3q0.net] ツールで防げないバグってのは 一度も通ったことのないパスのメモリリークの事を指しているんだろうけど それをどうにかしてほしいって話は無かったはずだが、どっから出てきたんだ? そんな話してたか? リーク検出ツールを使ってもテストの網羅度が完璧じゃなくて漏れてしまうこともある「が」 それでも一定の効果はあるので有用である という話はしたが テストのパスの網羅度が不十分で漏れてしまうメモリリークバグを ツールでどうにかする、とは俺は言ってないんだが、初めからな
886 名前:デフォルトの名無しさん (ササクッテロル Spd3-yqOs) mailto:sage [2017/03/23(木) 17:35:51.53 ID:argEiYvxp.net] >>853 読んでそんなトンチンカンな理解をする方が大間違いだろう メモリリークが大して騒がれない、ってことに対するオマケの補足情報にどんだけ突っかかるんだ
887 名前:デフォルトの名無しさん (ワッチョイ be6b-72yv) [2017/03/23(木) 18:00:16.89 ID:xx3Et9SY0.net] おまえ853で開口一番こう言ったぞ > ツールでメモリリークがないことを保証したいってだけなら > VC++のランタイム付属のやつで十分だろ どっから出てきたって、おまえの口からだよ
888 名前:デフォルトの名無しさん (スッップ Sd4a-ejJz) [2017/03/23(木) 18:26:51.25 ID:pJ6fwoOxd.net] また言った言わないの揚げ足取り合戦かよくだらねえ
889 名前:デフォルトの名無しさん (ワッチョイ be6b-72yv) [2017/03/23(木) 18:34:26.25 ID:xx3Et9SY0.net] 話の本題を無視して言葉尻にだけ突っかかる誰かさんのようなのを揚げ足取りというんだよ
890 名前:デフォルトの名無しさん (スプッッ Sde3-2Cpe) mailto:sage [2017/03/23(木) 18:54:08.36 ID:ne+fmuh4d.net] >>863 ありがとう とりあえずでboehmでメモリリーク監視することになった 思いきりリークしてるみたいだからどうしようかと悩むが... 別件なのだけどvc6環境のC++とvc9環境のC++で差分の出る演算ってあるかな? for文のスコープの範囲が変わるぐらいしかわからんくて 大きな演算の違いはないのだろうけどもそれぞれの環境でのモジュールで 本当に微々たる差が出ているみたいで... 基本的には結果に差分がなく、特定のパラメータファイルの時だけ差分が出てしまう。その差も30mb中の0.1%も満たないぐらい やってることとしてはvc6→vc9環境へプロジェクトファイルの移行
891 名前:デフォルトの名無しさん (スプッッ Sde3-2Cpe) mailto:sage [2017/03/23(木) 19:11:57.84 ID:ne+fmuh4d.net] パラメータファイルって書くと設定値みたいに見えるね 特徴抽出したやつに演算かけてます
892 名前:デフォルトの名無しさん (ワッチョイ 1bc8-VHv+) mailto:sage [2017/03/23(木) 19:20:15.49 ID:Ei+8urX30.net] >>848 32→64bit移行の安全性を実行時ツールで検出、というのはかなり無理じゃないか? だからみんなソースコードをチェックしているわけだし。 sgry.jp/pgarticles/64.html yukinarit.blog11.fc2.com/blog-entry-27.html qiita.com/izmktr/items/59085ca70a6c11b0b352 >>870 > 思いきりリークしてるみたいだからどうしようかと悩むが... 32→64bit移行ではリーク自体は発生しないぞ。 それは結果的に症状がリークなだけで、根本的に駄目なところがあるんだよ。 まずは32bitの旧バイナリと新テストパターンで足場を固めないと駄目だと思うぞ。 数値演算結果の誤差ならSSEとx87の精度の違いかもしれん。 ただしVC9(VS2008)は演算にはSSEを出せなかったはずだから関係ないとは思うが。
893 名前:デフォルトの名無しさん (スプッッ Sde3-2Cpe) mailto:sage [2017/03/23(木) 19:36:37.57 ID:ne+fmuh4d.net] >>872 長々とサンクス 思いきりリークしてるから..ってのは元々からリークしていただろうから 対処をどうしようか悩むなぁって意味でした SSEとx87についてちょっと調べてくる
894 名前:デフォルトの名無しさん (ワッチョイ 7b7a-7HKf) mailto:sage [2017/03/23(木) 19:50:33.67 ID:CpsZOT5F0.net] 浮動小数点の丸めモードが違うとかあるか?
895 名前:デフォルトの名無しさん (ドコグロ MMe2-7Y/j) mailto:sage [2017/03/23(木) 20:04:25.70 ID:8W2HqVqhM.net] >>870 vc6って標準準拠してたっけ? c++のような何かだったような気がするけど。
896 名前: ◆QZaw55cn4c (ワッチョイ a6ff-nbIt) mailto:sage [2017/03/23(木) 20:26:53.12 ID:qM4EW3hi0.net] >>870 ベームGCか,なかなか息がながいライブラリだね
897 名前:デフォルトの名無しさん (ワッチョイ 7b7a-7HKf) mailto:sage [2017/03/23(木) 20:32:55.87 ID:CpsZOT5F0.net] >>875 当時は標準規格というもの自体が無かった
898 名前:デフォルトの名無しさん (ワッチョイ 1bc8-VHv+) mailto:sage [2017/03/23(木) 20:37:31.58 ID:Ei+8urX30.net] >>873 あと、FMACの最適化がどこかであったはず。 (ただしググッても出てこないので、俺がGPUの話と混同して勘違いしているだけかも) 内容は、FMACの中間結果を精度が高い状態で保持しておき、FADDに突っ込むというもの。 これに該当した場合は、結果がハードウェア依存になる。 (旧ハードと新ハードでFMACの結果が微妙に異なる) だから同一ハードでの新旧バイナリでの結果をdiffしているのなら、これは該当しない。 環境移行が面倒等で、旧マシンで結果だけ作って新マシンと比べている場合、当たるかもしれない。 ただし再度言うが、GPUの話だったかもしれんのでよろしく。
899 名前:デフォルトの名無しさん (ドコグロ MMe2-hXJm) mailto:sage [2017/03/23(木) 20:40:17.12 ID:HovpjxiMM.net] >>870 > 別件なのだけどvc6環境のC++とvc9環境のC++で差分の出る演算ってあるかな? 正しいプログラムだとそんなに変更はないと思うけど、例えば引数の評価順に依存しているプログラムの動きが変わるって言うのはC言語あるあるだから 要するにバグの顕在化って奴ね なのでコンパイラ替えたら一通りテストした方がいい
900 名前:デフォルトの名無しさん (ワッチョイ aa67-QN42) mailto:sage [2017/03/23(木) 21:06:58.74 ID:63eMbsST0.net] 幸いなことに、再現性のあるバグだ。 メモリ関連にしては、ましな方。 画像データなんだよな? 当時だと、特徴抽出前にグレースケールにしてたもんだが。。 そのデータだけ、サイズが縦横違うとかないかな。 どっかで、メモリの取り方(x方向、y方向のピクセル値)間違えてるとか。 あるいは、メモリを取り直してたりしてないかな。 reallocとか。 実務的なとこでは、仕事の落とし所も考えといた方がいいかも。今回は、調査だけなのか、移植までなのか。。
901 名前:デフォルトの名無しさん (ワッチョイ 2b6e-72yv) mailto:sage [2017/03/23(木) 21:15:40.12 ID:FwJwtm3q0.net] >>867 もうあんまり話したくないけど、最後に言っておくと 実用上問題ないレベルで保証できればそれでよいだろってこと 100%バグがないことを保証するのはどうやっても何やってもどんなツール使っても 無理なのは当たり前の常識だろ VC++付属の検出ツールでも実用上問題ないレベルでのメモリリークの検査はできるし コードに2,3行追加するだけで、壮大にメモリリークしているかどうかぐらいは 直ぐにでもチェックできるから、とりあえず試してみろって話をしたんだよ というか、普通はONにした状態で開発しているものなんだよ あえてOFFにしとく理由は何もないからな、邪魔になるわけでもなし 質問者が何であえてOFFにした状態で開発していたのかは定かではないが 知らなかったってことなら今日からONにしとけばよいだけだろ で、実用上云々の説明がそのあとに続く「稀に漏れることがある」って話で >たまーにしか通らないパスでメモリリークが発生していた場合など >メモリリークの発見が遅れることはあるけど >まぁ通ってないパスがある時点でテストが十分でないということだし >一か月に一回ほどの頻度でメモリリークするぐらいは別に問題ないという考え方もある と書いたんだよ そのどうでも良いところにかみついて揚げ足取りしたのはお前だろ
902 名前:デフォルトの名無しさん (ワッチョイ 7b7a-7HKf) mailto:sage [2017/03/23(木) 21:24:27.07 ID:CpsZOT5F0.net] >>880 計算部分だけブレークポイント使って一行ずつ実行しながら見比べてみろよ
903 名前:デフォルトの名無しさん (ワッチョイ aa67-QN42) mailto:sage [2017/03/23(木) 21:33:57.23 ID:63eMbsST0.net] >>882 そだな。データが特定されてるんだもんな。
904 名前:デフォルトの名無しさん (ワッチョイ 2b6e-72yv) mailto:sage [2017/03/23(木) 21:38:04.51 ID:FwJwtm3q0.net] boehmは詳しくないが、普通メモリリーク検出ツールは どこで確保したメモリがリークしたのかわかるようになっている物が多いはずだぞ その周辺を漁ればメモリリークの箇所を特定することはそう難しくないハズ VC++付属のツールの場合は ttp://yukinarit.blog11.fc2.com/blog-entry-38.html ↑のようにしておくとリークしたメモリを確保した箇所の 「ソース名」「行数」「ダンプ」がわかる あとはちょっとソースコード追いかければリーク箇所を特定できるはず
905 名前:デフォルトの名無しさん (ワッチョイ aa67-QN42) mailto:sage [2017/03/23(木) 21:47:32.04 ID:63eMbsST0.net] memcpyとかも、解放、抜けたりしがち。
906 名前:デフォルトの名無しさん (ワッチョイ be6b-72yv) [2017/03/23(木) 22:20:42.38 ID:xx3Et9SY0.net] > 実用上問題ないレベルで保証できればそれでよいだろってこと 実用上問題あるかどうか、おまえ勝手に決めてるのか?
907 名前:デフォルトの名無しさん (ワッチョイ 2b92-2Cpe) mailto:sage [2017/03/23(木) 22:36:32.61 ID:ViT7/D1o0.net] すまん めっちゃレスもらってるから全部に逐一は答えられんわ まず答えてくれてる人ありがとう助かる >>879 俺もそうは思うんだけどもVC6時代のテスト項目とか残っていない さらに言えば仕様書や設計書すらなく困り果ててる >>880 サイズ自体が異なっていたから何かしらの処理で変な取り方をしているのだろうとは考えてる 実務のことだからほぼほぼ影響を与えないのであればコストと相談してスルーってのもありだけど...そこは要相談なんだろうな >>882 俺もそうはしたいんだがVC6環境がないから対比で比べられないんだわ
908 名前:デフォルトの名無しさん (ワッチョイ 2fb4-QntA) mailto:sage [2017/03/23(木) 23:14:34.92 ID:v1/Wdv6U0.net] valgrind自体はともかくvalgrindという単語を見て 以前このスレに現れたキティガイを思い出した
909 名前:デフォルトの名無しさん (ワッチョイ fe75-i4+Q) mailto:sage [2017/03/24(金) 00:06:32.21 ID:8SSjzg+S0.net] 漏れも、仕様書や設計書がない、DLLからエラーが返ってくるから、 そのDLLをデバッグしてくれとか、 1月150万円で、上場企業から請け負ったこともあるけど、 こういうのは直しても、切りがない。 違うタイプのデータが来ると、またエラーになる 無理だと断っても、また見てくれって言う。 そのDLLが何をやっているのか分からないし、仕様書もないから、 新規に作り直すことは無理だから C/C++で解析できる人なんて、まず見つからないから
910 名前:デフォルトの名無しさん (ワッチョイ 7b7a-7HKf) mailto:sage [2017/03/24(金) 00:16:13.17 ID:DhGI6SB10.net] ハッカーに1000万払おう
911 名前:デフォルトの名無しさん (ワッチョイ 1bc8-VHv+) mailto:sage [2017/03/24(金) 00:17:14.57 ID:RtKD05ZR0.net] >>889 マジカヨ?ちょっとその仕事試しに受けてみたいかも。 それってどれくらいの規模だった?
912 名前:デフォルトの名無しさん (ワッチョイ 63b7-rEFK) mailto:sage [2017/03/24(金) 00:18:51.24 ID:9w5lj4S/0.net] >>887 めっちゃスルーされてるけど >>844 は結構良かったよ。リーク箇所のスタックトレースまで出力される。 あとVC++標準のは誤検知する場合がある。 googleのv8でリークが誤検知されてた。
913 名前:デフォルトの名無しさん (ワッチョイ 9375-iMo4) [2017/03/24(金) 01:09:06.67 ID:DlmXd06I0.net] >>892 VC標準の貶すと顔
914 名前:真っ赤にして怒り出すやつ居るから気を付けろ [] [ここ壊れてます]
915 名前:デフォルトの名無しさん (ワッチョイ 9375-iMo4) [2017/03/24(金) 01:23:02.12 ID:DlmXd06I0.net] 彼にとってはリーク箇所のスタックトレースなんか要らないし、誤検出は使い方が悪いし、リークするコードなんて書かないから高機能は必要ないらしい。 挙げ句の果てに(自分の書いたコードに対して使うとも言ってないのに)そもそもリークするコード書いてる低脳と煽ってくる。
916 名前:デフォルトの名無しさん (ワッチョイ 1bc8-VHv+) mailto:sage [2017/03/24(金) 01:25:52.24 ID:RtKD05ZR0.net] >>887 ついでにこんなんが出てきたので貼っておく。 > サイン、コサインをインテルの CPU で計算すると少しバグっているらしい > tomeapp.jp/archives/1282 要するに、x87のアセンブラ命令 FSIN, FCOS 等には誤差が出る場合があって、 これを嫌うコンパイラの場合は自前で計算しているらしい。 だからコンパイラを変更した場合、sin,cosの値が微妙にずれる事があり得る。 VC6->VC9でどうなのかは知らん。
917 名前:デフォルトの名無しさん (ワッチョイ 1b84-rs+5) mailto:sage [2017/03/24(金) 01:39:49.34 ID:uwgr9JVd0.net] FPUのPIの値がちょっと誤差持ってるって話じゃなかったっけ?
918 名前:デフォルトの名無しさん (ワッチョイ 1bc8-VHv+) mailto:sage [2017/03/24(金) 01:58:41.18 ID:RtKD05ZR0.net] 俺はこれは初耳だったからよくは知らない。 > In a single Intel publication, the problem is partially acknowledged. The 1999 edition of Intel Architecture Software Developer’s Manual Volume 1: Basic Architecture (download) states: > > The trigonometric instructions may use a 66-bit approximation to the true value of pi to reduce the magnitude of the input argument. In this case, the final computed result can vary considerably from the true mathematically precise result. > > This statement, which never again appears in a public Intel document, acknowledges the argument reduction problem. However, the entirely separate problem of large errors near argument multiples of pi/2 is not addressed. > notabs.org/fpuaccuracy/index.htm 主張としては、sinXのXが無駄にでかい時は仕方ないとして、 pi/2の倍数のところに誤差があるのは駄目だろ、ということらしい。 つっても仮数部が10bit多いし、doubleに丸めるなら見えなくなると思うが。 正直なところ、浮動小数点の演算結果比較はこの手の落とし穴が大量にあるから、 完全一致は諦めて、4bit位の誤差までは見逃すようにしないと現実的に無理だと思う。
919 名前:889 (ワッチョイ fe75-i4+Q) mailto:sage [2017/03/24(金) 02:13:33.84 ID:8SSjzg+S0.net] >>891 20年前の話 プログラマー・SEは、1人月100〜150万円だけど、 会社が取ってくる仕事だから、社員なら1/3、派遣なら7割もらえる。 ただし、派遣では生活保障がない どこの大企業でも、プログラムの仕事は、ちょいちょいあるだろ >>895 JavaScriptでも誤差があるよ function calcNumberOfDigits(x) { return Math.floor(Math.log2(x)) + 1; } calcNumberOfDigits(Math.pow(2, 53) - 1); floorで切り捨てているから、52+1=53 になるはずなのに、54になる! Math.log2(x) = Math.log(x) / Math.LN2 これは、除数・被除数ともに誤差があるから、時々おかしくなる
920 名前:デフォルトの名無しさん (ワッチョイ 1bc8-VHv+) mailto:sage [2017/03/24(金) 02:49:48.36 ID:RtKD05ZR0.net] >>8
921 名前:98 いやその話じゃない。FSIN,FCOSの誤差の話は、 Intelは 1.0ulp 誤差だと言っているのにそうなってない、という話。 (とは言え仮数部が10bit多いのだが) 君が言っているのは数学的なものとだろ? それは浮動小数点では誤差があるのが仕様。 > floorで切り捨てているから、52+1=53 になるはずなのに、54になる! これは間違い。以下。 Math.floor(Math.log2(Math.pow(2,53)-1))+1 // 54で正しい。 Math.log2(Math.pow(2,53)-1) は、52よりも53に限りなく近いから、53になる。 > これは、除数・被除数ともに誤差があるから、時々おかしくなる これも上記の通り、認識間違い。 Math.LN2はそもそも「浮動小数点的には」誤差がない。 というより計算済みの値が使われる(はず) Math.log2(x)等の関数は一般的に割り算での実装はされないはず。 理由は以下。 ・割り算は誤差が出やすい(多分テーラー展開式等が使われる) ・割り算は遅い ・そもそも固定値割り算は逆数の掛け算に変更される (とはいえ、現実的にはこの方法は割り算よりも誤差が出たりするが) だから、 > Math.log2(x) = Math.log(x) / Math.LN2 が成立しない時も、それは浮動小数点計算による誤差であり、仕様。 [] [ここ壊れてます]
922 名前:デフォルトの名無しさん (ワッチョイ aa67-QN42) mailto:sage [2017/03/24(金) 03:00:17.44 ID:GqbwU5RX0.net] >>887 ソフトウェアとして、ライフサイクル切れてるのではないか。。 仕様がないのでは、検査できないではないか。 来期別案件で、再構築も提案していいかもな。只、お客さんから見ると機能がふえるわけではないから、なかなか首を縦に降ってもらえないのだが。
923 名前:デフォルトの名無しさん (スプッッ Sdea-2Cpe) mailto:sage [2017/03/24(金) 07:12:58.02 ID:pzB5kBTUd.net] >>892 すまん スルーしてるつもりはない 全レスすると全レスやつ〜って煽られたことあるから数多いときは一部にしてた... >>895 これの可能性ある気がする VC6時代のは別コンパイラでもコンパイルしてた〜みたいな話聞いてたから 今リリースされているのが別環境で用意ができるのであれば探してみるよありがとう >>900 だよね 設計者や仕様書が如何に大事かがわかったよ
924 名前:デフォルトの名無しさん (ワッチョイ aa1e-t8fU) mailto:sage [2017/03/25(土) 03:58:44.57 ID:D917NA3h0.net] 設計者: 私が辞めても代わりはいるもの
925 名前:デフォルトの名無しさん (ワッチョイ be8c-72yv) [2017/03/25(土) 18:13:50.51 ID:2Y4XLGXL0.net] プロとしての規律を大事にお仕事してるんですね
926 名前:デフォルトの名無しさん (ワッチョイ aa90-VHv+) mailto:sage [2017/03/26(日) 15:26:40.92 ID:pwPfsDuW0.net] >>895 こんなのあるんだ・・・誤差という言い方は語弊があるような 立派なバグじゃないですかインテルさん というかハードウェアって直せないの?
927 名前:デフォルトの名無しさん (ワッチョイ 1b84-rs+5) mailto:sage [2017/03/26(日) 15:50:44.38 ID:rQp0RVJN0.net] ソフトウエア資産的に修正ると多大な影響がある。
928 名前:デフォルトの名無しさん (ワッチョイ 7b7a-7HKf) mailto:sage [2017/03/26(日) 15:52:58.04 ID:r1GdkURH0.net] 特定のプロセッサが生産時期で結果が変わるとか地獄しかない
929 名前:デフォルトの名無しさん (ワッチョイ 1bc8-VHv+) mailto:sage [2017/03/26(日) 16:15:08.70 ID:Uwt+/Suh0.net] >>904 多分原因は>>896 からみのPI等の桁落ち(桁不足)だろうから、 修正自体は簡単で、増やせばいいだけ。 ただし、既存ソフトへの影響が大きすぎるのと、 そもそもx87の仮数部は10bit多くて、doubleに格納した場合は丸められるわけだから、 顕在化する確率はかなり低い。 この問題もx87(1980年)からなら30年以上経って発見されたわけだし。 また現在の科学技術計算ではdoubleが主流でx87は使われなくなりつつあるし。 だから、当面は無視するのが常策だよ。
930 名前:デフォルトの名無しさん (ワッチョイ fe1f-sIi0) [2017/03/26(日) 18:22:41.51 ID:Ntld20FG0.net] >>906 浮動小数点ではよくある、気にならないとおもうが・・ 浮動小数点の演算は誤差、ケタ落ちを考慮するのが普通。
931 名前:デフォルトの名無しさん (ワッチョイ fe1f-sIi0) [2017/03/26(日) 18:27:34.32 ID:Ntld20FG0.net] 誤差の
932 名前:問題よりソフトウェアの速いからという回答になってるが・・ なんでハードウエアサポート使わないの? この質問に対する回答によると、「2011年の10月以降 x86-64の Linuxではこの(ソフトウェア)コードが使われており、 明らかにFSINより速い(Since October 2011, this is the code that actually runs when you call sin() on a typical x86-64 Linux system. It is apparently faster than the fsin assembly instruction.)」とのことです。 というわけで、現在かなり普及している x86_64 アーキテクチャの CPU の三角関数命令 FSIN は、速度、精度などが問題視されており(少なくとも glibc では)、別途ソフトウェア的に実現されているようです。 まとめ ■サインなどの三角関数の値はテーラー展開を使用した有名な式を昔も今も使って計算していることが多い。 ■20年以上昔から浮動小数点数演算用のFPUには三角関数の値を計算する命令(ハードウェアサポート)がある。 ■しかしインテルの x86_64 系アーキテクチャーのこの命令は精度及び速度に問題があるらしく、少なくとも glibc 2.22 ではFPUのサイン命令は使っておらず、ソフトウェア的に計算しているらしい。 という感じでした。 http://tomeapp.jp/archives/1282 [] [ここ壊れてます]
933 名前: ◆QZaw55cn4c (ワッチョイ a6ff-nbIt) mailto:sage [2017/03/26(日) 19:45:11.69 ID:KxYPtDxZ0.net] テイラー展開/マクローリン展開(x=0) を中心から遠くに適用しようとすると誤差はでるね 周期で割って近場で代入するのが普通だが,それを嫌ったのかな?
934 名前:デフォルトの名無しさん (オッペケ Srd3-QntA) mailto:sage [2017/03/26(日) 21:51:40.27 ID:fl4IudC1r.net] 浮動小数点計算で精度が足りないとか言ってる奴は たいていは精度じゃなくてオツムが足りない
935 名前:デフォルトの名無しさん (ワッチョイ 8ac3-Cbvv) mailto:sage [2017/03/26(日) 21:53:51.01 ID:5/5Va2U30.net] 最近の大学では実用数学やらんのか
936 名前:デフォルトの名無しさん (ワッチョイ 7b7a-7HKf) mailto:sage [2017/03/26(日) 22:32:47.30 ID:r1GdkURH0.net] 64bitで精度が足りなくなるのは原子力か宇宙か暗号くらいじゃないのか
937 名前:デフォルトの名無しさん (オッペケ Srd3-QntA) mailto:sage [2017/03/26(日) 22:40:07.59 ID:pnqG1H1Or.net] 精度の問題と>>906 の様にロジック自体がおかしいアホの問題を一緒にしてしまっているような
938 名前:デフォルトの名無しさん (ワッチョイ b71f-Oq8d) mailto:sage [2017/03/26(日) 22:49:30.03 ID:+0YN82z50.net] >>913 分布を扱う業種だったら足りなくなるだろ tail riskの話になると64bitじゃ全然足りない
939 名前:デフォルトの名無しさん (ワッチョイ 6f92-kvyc) [2017/03/27(月) 03:12:54.27 ID:om6iAVJe0.net] 浮動小数点の精度の問題と特定のsin実装の誤差の問題をごっちゃにしてるのがいるな
940 名前:デフォルトの名無しさん (ワッチョイ 7b59-BXGz) mailto:sage [2017/03/27(月) 19:37:51.44 ID:DcY7c9jX0.net] 三角関数とか測量や透視投影関連の画角計算するようなごく一部の連中しか使わないだろJK しいて言えば機械学習する人らがまれにacos()を使うかな〜ぐらい ニッチすぎてハードウェア演算だろうがソフトウェアーエミュだろうが大して問題になんね
941 名前:デフォルトの名無しさん (ワッチョイ aa67-QN42) mailto:sage [2017/03/27(月) 19:47:44.82 ID:iyhdhEhz0.net] 話の元としては、特徴抽出だったから、フーリエ変換かな。。。
942 名前:デフォルトの名無しさん (ワッチョイ 2b92-2Cpe) mailto:sage [2017/03/27(月) 20:48:32.18 ID:iw91puSD0.net] ソフトウェア開発工程に実装設計が必要なんじゃないかなって思い始めたんだけど そんなことしてるひといるかな?
943 名前:デフォルトの名無しさん (ワッチョイ aa6b-VHv+) mailto:sage [2017/03/27(月) 20:59:26.57 ID:+nINF5LH0.net] ニッチな数学関数は社会インフラのクリティカルな部分に使われるからひやひやする でもそんくらいの些細な誤差なら数百億かけたお天気衛星が落ちるくらい うみほたるがいきなし潰れたりスカイツリーがいきなり倒れたりはしない
944 名前:デフォルトの名無しさん (ワッチョイ aa67-QN42) mailto:sage [2017/03/27(月) 21:12:17.23 ID:iyhdhEhz0.net] >>919 LLDのことじゃなくて? 具体的には、どんな感じ?
945 名前:デフォルトの名無しさん (ワッチョイ 7b7a-7HKf) mailto:sage [2017/03/27(月) 21:48:32.03 ID:cEFtoidy0.net] cmathのよくわからない関数は誰か使ってんのか?
946 名前:デフォルトの名無しさん (ワッチョイ be8c-72yv) [2017/03/27(月) 22:03:40.41 ID:gdZSPxyQ0.net] C++17でspecial math functionsが追加される件のことか?
947 名前:デフォルトの名無しさん (ササクッテロル Spd3-yqOs) mailto:sage [2017/03/27(月) 22:16:03.16 ID:9PqnwE37p.net] LLDって何の略?
948 名前:デフォルトの名無しさん (ワッチョイ be8c-N8vi) mailto:sage [2017/03/27(月) 22:17:37.19 ID:YTkDzohr0.net] long long decimal
949 名前:デフォルトの名無しさん (ワッチョイ aa67-QN42) mailto:sage [2017/03/27(月) 22:52:15.25 ID:iyhdhEhz0.net] Lower Level Design
950 名前:デフォルトの名無しさん (スプッッ Sdea-2Cpe) mailto:sage [2017/03/28(火) 00:29:07.69 ID:wYvZd6LUd.net] >>921 はじめて聞く 俺の中のイメージだと 要件定義・基本設計・詳細設計の次に実装設計が合ってもいいと思うんだ 詳細設計って機能とかだからそれをどう実現するかとかの関数の中のサブ関数レベルの話
951 名前:デフォルトの名無しさん (ワッチョイ b7f4-Vb+v) mailto:sage [2017/03/28(火) 00:57:49.92 ID:0r7X/qmQ0.net] >>917 いや、普通にPC使ってたら三角関数位使うだろ
952 名前:926 (ワッチョイ aa67-QN42) mailto:sage [2017/03/28(火) 01:17:13.75 ID:EZ0E4K7B0.net] >>927 詳細設計=LLDね。 詳細設計をやると、実装の設計までいきませんか? データの持ち方、関数のフローチャートまで書くとおもうのですが。。 単体検査で、分岐追えなくなってしまうし。。 なんか、思い違いしてますかね。
953 名前:デフォルトの名無しさん (ワッチョイ 9375-iMo4) [2017/03/28(火) 01:21:00.12 ID:r9lg9pov0.net] >>928 GUI使ってたらグラフィックスライブラリが間違いなく使ってるよね
954 名前:デフォルトの名無しさん (ワッチョイ 0aed-yqOs) mailto:sage [2017/03/28(火) 01:35:15.98 ID:7ttxV7Jp0.net] その辺の言葉って仕事の分野とか規模とかによってまちまちな気がして面倒臭い 結局のところブレークダウンして行ってるだけだし、文書のメンテする手間とか勘案した上でやった方が良いと判断したならやれば良いんじゃないか あとスレチじゃね
955 名前:デフォルトの名無しさん (ドコグロ MM4a-hXJm) mailto:sage [2017/03/28(火) 06:57:20.65 ID:+hgLXPeGM.net] > 詳細設計=LLDね。 俺も初めて聞いた 英語で低レベルな糞設計は何て言うんだろ?
956 名前:デフォルトの名無しさん (スプッッ Sdea-2Cpe) mailto:sage [2017/03/28(火) 07:09:38.55 ID:wYvZd6LUd.net] >>931 スレチかすまん ちょっと探してくる >>929 規模によるとは思うが事細かな処理内容は記載されなくないか 分岐処理とかの内部のやつとか
957 名前:デフォルトの名無しさん (ワッチョイ eb37-72yv) [2017/03/28(火) 10:52:55.66 ID:JfwQ0DgC0.net] crappy design
958 名前:デフォルトの名無しさん (ワッチョイ 6f92-kvyc) [2017/03/28(火) 17:59:50.95 ID:lUbwlPy10.net] >>917 三角関数がニッチすぎるだとかwさすがですね
959 名前:デフォルトの名無しさん (ガックシ 0626-0VlJ) mailto:sage [2017/03/28(火) 20:42:08.50 ID:Woa0lIQR6.net] まあ数学はなるたけ使わずにプログラムできるようにいろんなライブラリが整備されてるわけだから、三角関数不要と思ってる奴がいるのはむしろライブラリ作成者が成功している証といえる
960 名前:デフォルトの名無しさん (ワッチョイ eb5e-72yv) [2017/03/28(火) 23:53:38.80 ID:mX0+s2UE0.net] >>936 おまえシャブでも食ってんのか? 今日は何グラム?
961 名前:デフォルトの名無しさん (オッペケ Srd3-QntA) mailto:sage [2017/03/29(水) 08:00:31.62 ID:vWDDuFOJr.net] double型は使う分野と使わない分野の差が激しい 少なくとも誰でも使う訳ではない
962 名前:デフォルトの名無しさん (ワッチョイ 5739-6tpp) [2017/03/29(水) 09:05:07.67 ID:Ysl+RBZV0.net] シャブシャブなら
963 名前:デフォルトの名無しさん (ワッチョイ 1b84-rs+5) mailto:sage [2017/03/29(水) 17:29:03.34 ID:5uJ1HJ780.net] ideone.com/jWckMu 誰か助けて。 constexprクラスの練習してるけど、うまく動かない。 なんで?
964 名前:デフォルトの名無しさん (ワッチョイ 1b84-rs+5) mailto:sage [2017/03/29(水) 17:52:07.04 ID:5uJ1HJ780.net] ideone.com/oXM2RE これも無理だった。 もしかして、std::arrayのイテレータってconstexpr対応してない??
965 名前:デフォルトの名無しさん (ワッチョイ 1b84-rs+5) mailto:sage [2017/03/29(水) 18:50:14.93 ID:5uJ1HJ780.net] ideone.com/QBggO4 VCで動くけどGCCで動かない魔法のコード。 もういやー。
966 名前:デフォルトの名無しさん (ワッチョイ 5728-TrMc) mailto:sage [2017/03/29(水) 18:50:40.75 ID:Bb2qhsdR0.net] C++14からループとか使えるようになってたのか 「std::array constexpr」でググると知りたいことに辿り着けるかと
967 名前:デフォルトの名無しさん (ワッチョイ 1b84-rs+5) mailto:sage [2017/03/29(水) 19:16:10.03 ID:5uJ1HJ780.net] d.hatena.ne.jp/yohhoy/20160328/p1 これか。今策定中やんけ・・・。 俺には早かったな。もうちょっと環境がそろわないとむりだー。
968 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd4a-qegt) mailto:sage [2017/03/29(水) 20:18:49.04 ID:uG+6tdKud.net] >>945 ideone.com/j5in94
969 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd4a-qegt) mailto:sage [2017/03/29(水) 20:27:00.54 ID:uG+6tdKud.net] typenameを削っただけだ。
970 名前:デフォルトの名無しさん (オッペケ Srd3-QntA) mailto:sage [2017/03/29(水) 21:16:39.11 ID:sErT1Yizr.net] C++17のドラフトはライブラリのtypedefがusing宣言に修正されて見やすくなった typedefが老害と言われる日も遠くない
971 名前:デフォルトの名無しさん (ワッチョイ cff9-72yv) [2017/03/29(水) 21:24:13.15 ID:NU8Q9yFr0.net] typedefはもういらんな
972 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd4a-qegt) mailto:sage [2017/03/29(水) 21:38:57.12 ID:uG+6tdKud.net] テンプレートの型を使うときに、typenameが要る場合と要らない場合があって、使い分けないといけない。
973 名前:デフォルトの名無しさん (ワッチョイ 2b92-2Cpe) mailto:sage [2017/03/29(水) 22:53:40.27 ID:RGihPrn00.net] 質問なんだが二台構成のPC間(LANで直接繋ぐ)のソフトウェア同士で通信するときは 相手方のIPアドレス指定してその次にポートを指定するだけで良い? そんなことC++でできる??
974 名前:デフォルトの名無しさん (ワッチョイ cff9-72yv) [2017/03/29(水) 22:54:03.75 ID:NU8Q9yFr0.net] いま酔っ払ってて思考能力がないが それ規格のバグちゃうの? まさか特定のコンパイラでどうたらって話じゃねえだろな?
975 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd4a-qegt) mailto:sage [2017/03/29(水) 23:10:32.67 ID:uG+6tdKud.net] 酔っぱらいは機械の操作をしてはなりません
976 名前:デフォルトの名無しさん (ワッチョイ 7b59-BXGz) mailto:sage [2017/03/29(水) 23:32:23.28 ID:AoD4FYay0.net] 型なのか変数なのかまぎらわいし依存名の解決に使う
977 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/03/30(木) 00:08:17.06 ID:POGQ4vF/r.net] 規格のバグではなく「テンプレートの型」などという意味不明な言葉を使う奴のオツムのバグか エラーにしなければならないのにコンパイルを通してしまう特定のコンパイラーのバグ
978 名前:デフォルトの名無しさん (ワッチョイ cf1f-jsM4) mailto:sage [2017/03/30(木) 00:32:16.96 ID:gILJOuVy0.net] >>950 できるかどうかなら、出来ると言うことに 詳しく聞きたいなら、こちらの方が良いかも echo.2ch.net/test/read.cgi/tech/1414709836/
979 名前:デフォルトの名無しさん (ワッチョイ 53c1-Fkbu) mailto:sage [2017/03/30(木) 01:52:01.18 ID:igjKpMzz0.net] funcっていう関数があったときに func(char* a) と func(char *a)って違う?
980 名前:デフォルトの名無しさん (ワッチョイ b392-8ugA) mailto:sage [2017/03/30(木) 01:53:25.34 ID:T78D8oTL0.net] >>956 ポインタの位置が違うだけ?一緒だよ >>955 できるか そこも見てたんだけどログの流れ遅くてこっちに来てしまった
981 名前:デフォルトの名無しさん (ワッチョイ f37a-QmV0) mailto:sage [2017/03/30(木) 01:58:51.15 ID:Qgxuh/pI0.net] ぐぐればわかることを
982 名前:デフォルトの名無しさん (ワッチョイ 53c1-Fkbu) mailto:sage [2017/03/30(木) 02:00:30.85 ID:igjKpMzz0.net] >>957 同じか ありがとう
983 名前:デフォルトの名無しさん (ワッチョイ bf3c-agmj) [2017/03/30(木) 02:32:10.51 ID:sHIKu4vn0.net] >>14 プログラムのローダーがやるんだろう。 www.ertl.jp/~takayuki/readings/info/no02.html https://ja.wikipedia.org/wiki/%E3%83%AD%E3%83%BC%E3%83%80 アセンブラプログラミングでよく使う .BSSという擬似命令は データセグメントのうち、0で初期化されるものをいう。 https://ja.wikipedia.org/wiki/.bss 非0の場合は実行ファイルに初期化内容が書かれる。 セグメントの情報は実行ファイルに WindowsだったらPE形式(つまりexe)にセクションとして書かれている。 0初期化領域は、実体の記述はなくサイズだけ書いてあることもある。 コンパイラやリンカによって、セクションの名前は変わるけれども コードセグメント → .text データセグメント → .data 読専データ → .rdata リソース → .rsrc こういったセクション名を付けるのが慣習となっている。 .bssというセクション名を持ってるPEファイルも結構あるっぽい。 OSがない原始的なコンピュータの場合は、読み取り専用はROMに置くまでだが、0も非0もRAMに置くことになる。 最近のマイコンなら、実行ファイル内に、0を記述しておくか、非0を記述しておくかということで済むはず。なんらかのハードがメモリ空間へロードさせる。 30年位前だったらROMがメモリ配線に直結されるし、容量的に初期値を持ったRAMということ自体がタブーだろうから、コード内に初期値や0初期化の処理を埋め込むことになる。
984 名前:デフォルトの名無しさん (ワッチョイ b392-AsIq) mailto:sage [2017/03/30(木) 03:34:28.25 ID:9cHNN/bR0.net] >>960 ここはC++スレだぞ 質問の意味理解してない的はずれな長文でロングパス返さなくて良い
985 名前:デフォルトの名無しさん (ワッチョイ 038f-MCV6) [2017/03/30(木) 06:51:34.25 ID:kb+hG/9a0.net] 記録的な亀レスだな
986 名前:デフォルトの名無しさん (ワッチョイ 83b4-bOuD) mailto:sage [2017/03/30(木) 07:10:52.31 ID:GtG5BmiK0.net] >>955 が質問者の日本語を理解出来ていない気がしなくもない
987 名前:デフォルトの名無しさん (ワッチョイ 7384-+x88) mailto:sage [2017/03/30(木) 08:19:28.37 ID:/X8qE6aT0.net] >>945 ありゃ、残ってたか。それは盲点だった。 参考になったよありがとう。
988 名前:デフォルトの名無しさん (アウアウオー Sa1f-mlhd) [2017/03/30(木) 08:40:58.04 ID:9khgRv1/a.net] https://goo.gl/8by4rX これは嫌だなー。。本当?
989 名前:デフォルトの名無しさん (ワッチョイ bfcc-hXdu) mailto:sage [2017/03/30(木) 08:50:24.61 ID:FvKuiJ0u0.net] どうせまたお肌のスキンケアだろ
990 名前:デフォルトの名無しさん (スプッッ Sddf-8ugA) mailto:sage [2017/03/30(木) 11:54:42.41 ID:3i58Fh9vd.net] namespaseで区切るのは良いんだけど 無名名前空間の使い道がさっぱりわからん
991 名前:デフォルトの名無しさん (ワッチョイ a328-ZZMP) mailto:sage [2017/03/30(木) 12:05:24.60 ID:QknQ1y490.net] そのソース以外では使わない関数なんかを放り込んでおけばいい staticと同じ使い道かな
992 名前:デフォルトの名無しさん (ワッチョイ 038f-MCV6) [2017/03/30(木) 12:37:53.22 ID:kb+hG/9a0.net] つーか無名名前空間があれば記憶クラスのstaticはいらんだろ 1つ1つちまちまstaticをつけて回らなくてもまとめてボンだし
993 名前:デフォルトの名無しさん (スップ Sddf-mnw5) mailto:sage [2017/03/30(木) 12:40:17.76 ID:41dNcfyJd.net] >>967 名前を考えるという面倒くささなしにメリットを享受できる。
994 名前:デフォルトの名無しさん (ドコグロ MM1f-3MUK) mailto:sage [2017/03/30(木) 13:02:35.48 ID:tcaHNIPGM.net] >>962 記録的と言うのはこういう奴だろ hanabi.2ch.net/test/read.cgi/i4004/1221375066/491
995 名前:デフォルトの名無しさん (ワッチョイ 038f-MCV6) [2017/03/30(木) 13:40:52.52 ID:kb+hG/9a0.net] 8年半かw
996 名前:デフォルトの名無しさん (ラクッペ MM97-8ugA) mailto:sage [2017/03/30(木) 17:30:29.40 ID:K9zcp/soM.net] xxx.hに定義されたクラスのメンバ関数を、xxx.cppではなくxxx_impl.hというファイルに実装してるソースがあるのですが、これはどういった意図でしょうか?
997 名前:デフォルトの名無しさん (ワッチョイ cf92-KV4R) [2017/03/30(木) 17:36:39.51 ID:NvGEhIva0.net] Pimplの実装部分を別ファイルにしたかったんじゃね
998 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/03/30(木) 17:36:40.33 ID:oKZnpR9xr.net] 作った奴に訊けボケ
999 名前:デフォルトの名無しさん (ササクッテロレ Sp17-EkMZ) mailto:sage [2017/03/30(木) 17:41:14.24 ID:uipyTNiYp.net] ヘッダで完結させたい テンプレート関数 ヘッダと実装の分離 このへん
1000 名前:デフォルトの名無しさん (ワッチョイ f37a-QmV0) mailto:sage [2017/03/30(木) 19:08:10.58 ID:Qgxuh/pI0.net] 何が何でもヘッダから実装を追い出したい人がやってるやつ
1001 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/03/30(木) 19:50:46.10 ID:dELrX4bqr.net] ↑ヘッダーとファイルを混同している低能 そしてxxx_impl.hをxxx_impl.cppに空目したアホ
1002 名前:デフォルトの名無しさん (スッップ Sddf-ahp/) mailto:sage [2017/03/30(木) 20:13:43.42 ID:qxGCi119d.net] ヘッダに実装書くとコンパル時間うざくない?
1003 名前:デフォルトの名無しさん (ワッチョイ bf3c-agmj) [2017/03/30(木) 20:33:38.20 ID:sHIKu4vn0.net] >>961 バカでごめん。 >>9-14 以降、よく高級言語だけでギャーギャー130レスも盛り上がれたな。 qiita.com/nanashi/items/4aff10ab6f9669d006dc これそっくりのコードで実験した int hoge(int i) { int r=0; if (i >= 0) { static int ii = static_int(i); r=ii; } else { static int ii = static_int(i); r=ii; } return r; } static_int(i)を呼び出すあたりで MOV DWORD PTR SS:[ESP],a.00406048 ←ガード(ロック)のためのオブジェクト(もちろんコンパイラが吐く暗黙のだろう)への参照を引数にとっている模様 CALL <JMP.&libstdc++-6.__cxa_guard_acquire> → この中には libwinpthread-1の pthread_once、pthread_mutex_lock、pthread_cond_wait、pthread_mutex_unlockなど(>>15 ) TEST EAX, EAX JE なんちゃら (つまりこの分岐でstaticを初期化するかどうか決めている模様) リリースはこれ MOV DWORD PTR SS:[ESP],a.00406048 CALL <JMP.&libstdc++-6.__cxa_guard_release> 上記はhoge()内が i と定数比較による単純な正負2分岐であり、呼び出しもhoge(1)などの定数の場合は、hoge()が二つの関数に展開された場合もあった。 hoge()内の i の分岐が定数比較の5分岐(else if)にしてみたら、ガードオブジェクトが個別に5つ作られているように見えた。 結構おもしろね、この結果。
1004 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 20:55:33.59 ID:8zS706yR0.net] >>967 なんらかのクラスのメンバ関数を他の翻訳単位から見えなくしたいが 明示的に名前つけたnamespaceにしたくないときは要る staticでは代わりにならない (他になんかあるっけ;
1005 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/03/30(木) 21:03:14.83 ID:dELrX4bqr.net] >クラスのメンバ関数を他の翻訳単位から見えなくしたいが明示的に名前つけたnamespaceにしたくないとき 始めて聞く珍妙な説だ 今日はクスリを飲み忘れているとか?
1006 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 21:21:56.78 ID:8zS706yR0.net] >>982 a.cppとb.cppに同じ名前のクラスの定義を書いてしまい、さらに同じシグネチャのメンバ関数を書いてしまい、 しかし関数の中身が違うケースを考えると良い これはリンク時にエラーになるか、杜撰な処理系だとどちらかが適当に呼ばれるという実害があり、 なおかつnamespaceでガードしない限り、ソースコードを弄る誰かが知らずに上のケースを実現してしまう危険性が残る
1007 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 21:26:32.64 ID:8zS706yR0.net] スマン 誤: namespaceでガードしない限り 正: 無名namespaceでガードしない限り 名前付きnamespaceだとたまたま同じ名前を使われてしまう危険性が残る、
1008 名前:デフォルトの名無しさん (ワッチョイ cf1f-jsM4) mailto:sage [2017/03/30(木) 21:26:49.87 ID:gILJOuVy0.net] 杜撰な処理系って具体的には何?
1009 名前:デフォルトの名無しさん (ワッチョイ 038f-MCV6) [2017/03/30(木) 21:33:19.96 ID:kb+hG/9a0.net] >>981 メンバは強制的に外部結合だからなあ 982は
1010 名前:Vャブじゃなくエトルフィンでも入れてるのかな [] [ここ壊れてます]
1011 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 21:34:44.32 ID:8zS706yR0.net] >>985 Visual Studo 2010についてくるVC++とかいうマイナーな処理系 2008もそうだったような…
1012 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 21:39:33.97 ID:8zS706yR0.net] 次のコードで実験でくる。今日実験したら答えはcall_foo_a()もcall_foo_b()も30やったわ; ■ "a.cpp" static foo { int func(int x, int y) { return x + y; } }; void call_foo_a() { foo x; printf("%s: func(10, 20)=%d\n", __FUNCTION__, x.func(10, 20)); } ■ "b.cpp" (a.cppと同じだが、foo::func()の中身を return x - y;に変えたやつ) ■ "main.cpp" extern void call_foo_a(); extern void call_foo_b(); int main() { call_foo_a(); call_foo_b(); }
1013 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 21:43:20.63 ID:8zS706yR0.net] >>987 それはそうかもしれないが、無名namespaceのマングリング規則がトリッキーなのを >>987 は知らないんじゃないの; いや詳しくは漏れも知らんが、 実際>>988 のコードは"a.cpp"と"b.cpp"のfooをどっちも無名namespaceで囲えば正しく動く、 (call_foo_a()は30、call_foo_b()は-10となる、
1014 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/03/30(木) 21:45:46.29 ID:dELrX4bqr.net] >>983 >しかし関数の中身が違うケースを考えると良い なるほど それはクラスの定義自体が漏れていることが問題なのだが なぜかメンバ関数の問題と勘違いしてしまったのだな
1015 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 21:49:03.80 ID:8zS706yR0.net] >>990 何言ってるのかわからんが推測でレスするが、 メンバ関数を含まないクラスや構造体はリンクが必要なシンボルを生成しないから 同名のブツが複数の翻訳単位にあっても全く問題は無い(よってC言語はstaticだけで逝けた つまりメンバ関数がこの話の本質だとわかっていない>>990 のレスは大概だ、
1016 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/03/30(木) 22:05:28.61 ID:dELrX4bqr.net] >全く問題は無い なるほど ODR違反の未定義動作が問題無いと考えてしまうようでは致し方ない。 ちなみにC++にはテンプレートというものが有って 重複定義された型をパラメーターに持つテンプレートのインスタンスが問題を起こすと言うことには気づかなかったらしい
1017 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 22:15:12.42 ID:8zS706yR0.net] >>992 ていうか話は逆で、>>988 のようなケースがあるからODR制約という概念が生まれ、 無名namespaceは>>988 のようなケースにおける解決策 (異なるマングリング名で異なる定義を識別するのだからODR制約には抵触しなくなる ソースは脳内 >重複定義された型をパラメーターに持つテンプレートのインスタンスが問題を起こすと言うことには気づかなかったらしい そりゃーODR制約違反のソースだとそうなるが、 無名namespaceで修正した>>988 のfooでは起き得ない話、
1018 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/03/30(木) 22:24:43.35 ID:dELrX4bqr.net] >無名namespaceで修正した>>988 のfooでは起き得ない話、 うーむ、二つ前の本人のレスは 無名namespaceで修正してなくても関数が無ければ全く問題ない だったと思うのだが、もう忘れたのだろうか
1019 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 22:47:57.29 ID:8zS706yR0.net] おk 無名namespaceで修正して「いない」>>998 はODR違反だった気がするので 今謹んで訂正した、
1020 名前:デフォルトの名無しさん (ワッチョイ d372-8ugA) mailto:sage [2017/03/30(木) 23:55:20.49 ID:Plkrcx8f0.net] >>976 テンプレート関数だからでした。 想定されてたコンパイラのテンプレートの解釈がinclusion-modelってやつで、そのためでした。 ありがとうございました。
1021 名前:デフォルトの名無しさん (ワッチョイ efc8-CrJt) mailto:sage [2017/03/31(金) 01:06:57.90 ID:ryHYQIXS0.net] こういう糞議論してる間にほかの言語で着々とプロダクトが作られていくわけである。
1022 名前:デフォルトの名無しさん (ワッチョイ f37a-QmV0) mailto:sage [2017/03/31(金) 01:09:12.34 ID:UkLjKqcm0.net] 記述の自由度が高いせいで全貌を知る者がほとんど居ない
1023 名前:デフォルトの名無しさん (ワッチョイ cf36-FVbu) mailto:sage [2017/03/31(金) 01:14:14.24 ID:RI1LGJ050.net] いや利用者の多いまともなプロダクトはc++で記述されているのが多いだろ。 LL言語のVMとかブラウザとかもそうだし
1024 名前:デフォルトの名無しさん (ワッチョイ cf92-KV4R) [2017/03/31(金) 01:44:24.21 ID:zbf3isLY0.net] パフォーマンスが重要な製品作る必要あるなら現状C++しか選択肢ないからね
1025 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています