[過去ログ] Visual Studio 2008 Part 22 (314レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
275: 2018/09/17(月)02:49 ID:dj7qSZnZ(2/17) AAS
普通のコンソールアプリケーション(CLRじゃないほう)でも
同じコードで普通にまったく同じように再現するワケだが

ホントなキミラはなにを頭悪いことばっかりいってんの?
実行結果だけははっといてやるが
276
(1): 2018/09/17(月)02:50 ID:dj7qSZnZ(3/17) AAS
AA省
277
(1): 2018/09/17(月)02:50 ID:dj7qSZnZ(4/17) AAS
AA省
278
(1): 2018/09/17(月)02:51 ID:dj7qSZnZ(5/17) AAS
?-1 デフォルト設定(Release) 【実行結果】

↓このコードの逆アセンブルコード
外部リンク:ideone.com

[1]0x0007F2C44DFFF8F2:1.1053482540585106e-308
[2]0x1FF68DDFB62221DE:1.051355436595308e-154
279
(1): 2018/09/17(月)02:51 ID:dj7qSZnZ(6/17) AAS
AA省
280
(1): 2018/09/17(月)02:52 ID:dj7qSZnZ(7/17) AAS
AA省
281
(1): 2018/09/17(月)02:52 ID:dj7qSZnZ(8/17) AAS
?-2 デフォルト設定(Release) 【実行結果】

↓このコードの逆アセンブルコード
外部リンク:ideone.com

↓実行結果を書き込めないからこっちに書き込んどいた
外部リンク:ideone.com

[1]0x0007F2C44DFFF8F1:1.1053482540585101e-308
[2]0x1FF68DDFB62221DD:1.0513554365953078e-154
282
(2): 2018/09/17(月)02:53 ID:dj7qSZnZ(9/17) AAS
AA省
283: 2018/09/17(月)02:54 ID:dj7qSZnZ(10/17) AAS
(正)>>282
(誤)>>279
284
(1): 2018/09/17(月)02:57 ID:dj7qSZnZ(11/17) AAS
>>276-277のコードも>>282,280のコードも
も同じ条件でデフォルトでコンパイルしてる

一行コメントはずしてコンパイルしなおすだけだからな

で、>>278>>281みたいな結果になる
>>281の実行結果はDebugビルドとまったく同じになる
そのまんま

CLRのとき(>>273)の動作とまったく同じ
キミラはずーっとなにやってるわけ?
285: 2018/09/17(月)09:44 ID:yu1Dprt2(1) AAS
>>284
同一のreleaseをコンソールで実行するかデバッガで実行するかで結果が異なるのはなぜだろう。
という話をしていたのであって、
debug/releaseで別の結果になることを問題にしているのではないです。
286
(1): 2018/09/17(月)10:25 ID:+dwRu2dr(3/8) AAS
>>191がコンソール起動とIDE起動で挙動が異なる理由は分かりました。
ありがとう。

結論はつまり以下だ。
> JIT の最適化とデバッグ(抜粋)
> マネージ アプリケーションをデバッグするとき、Visual Studio では、既定で、
> ジャスト イン タイム (JIT: Just-In-Time) コードの最適化が省略されています。
> 最適化されたコードをデバッグするのは困難であるため、
> 最適化されたコードで発生するバグが、非最適化バージョンでは再現しないときにのみお勧めします。
> JIT 最適化は、Visual Studio の [モジュールの読み込み中に JIT 最適化を抑制する] オプションで制御されます。
> 実行中のプロセスにアタッチする場合、既に読み込まれ、JIT でコンパイルされ、
省4
287: 2018/09/17(月)10:25 ID:+dwRu2dr(4/8) AAS
その他諸々、話を整理すると、以下となる。(ソースは>>191参照)
1. managedコードではMSILが出力され、x86コードは含まれていない。
2. 起動時、MSILはJITされ、x86コードに落とされる。
3. このため、mainの1行目でブレークポイントで止め、calc_norm_and_regulateの逆アセンブルを見ようとしても、
 IDE上で「逆アセンブルを表示できません。式がまだネイティブ マシン コードに翻訳されていません。」と出る。
 これはmainの1行目に System::Diagnostics::Debugger::Launch(); を入れたときも同様。
4. そしてこのJITに関して、上記IDE中の 『[モジュールの読み込み中に JIT 最適化を抑制する] オプション』 が効いてくる。
 規定ではオフ、つまり、ReleaseビルドでもIDE起動ならJIT最適化は抑制される。
 これがfld/fmul/fadd/fstpのループコードになる理由。
 これをオンにすれば、確かにReleaseビルドIDE起動でも、
省12
288
(1): 2018/09/17(月)10:28 ID:dj7qSZnZ(12/17) AAS
同じリリースビルドで
結果がかわってんのになにいってんの?

fprintf入れるだけで
リリースビルドで結果が変わる
289: 2018/09/17(月)10:31 ID:dj7qSZnZ(13/17) AAS
やはり低学歴知恵遅れは
結果が意味するところが分かってないわ。。。
290: 2018/09/17(月)10:32 ID:dj7qSZnZ(14/17) AAS
ちなみにオレがあげた結果は
すべてリリースビルドの結果だからな
デバッグビルドの結果なんかあげても
意味ないからな
291: 2018/09/17(月)10:38 ID:dj7qSZnZ(15/17) AAS
CLRのケースもCLRでない普通のexeのケースでも
結果はまったく同じだからな

しかもすべてリリースビルドで
おきてる誤差までぴったり一致してる
292
(1): 2018/09/17(月)10:52 ID:+dwRu2dr(5/8) AAS
>>288
お前は相変わらず理解してないな。

80bit(拡張倍精度)と64bit(倍精度)の演算で桁落ちが異なり、結果が異なるのは当然なんだよ。
問題は同じバイナリの癖に何故起動方法によって異なるのか?だったんだ。

理由はMSILだからだ。
MSILはCLR上でJITされ、x86コードに落とされる。
このときにJIT最適化がかかれば、拡張倍精度(を保ったまま)のコードになるし、
最適化がかからず毎回メモリに書き戻していれば、倍精度のコードになる。
.NETにおける同一バイナリってのは、同一MSILという意味であって、同一x86機械語という意味ではない。
だから、確かに同一バイナリを掴んでいたが、起動方法によって結果が異なっていたんだよ。
省9
293: 2018/09/17(月)10:54 ID:+dwRu2dr(6/8) AAS
× fprint
○ printf
まあ、分かると思いますが
294: 2018/09/17(月)10:57 ID:dj7qSZnZ(16/17) AAS
で、最適化されてるかされてないかすら
いまのいままで気付くことすらできない
そして気付く方法すらわからなかったわけか

うあわ
頭わるう。。。

キミ、プログラムくむの向いてないわ
295: 2018/09/17(月)10:58 ID:dj7qSZnZ(17/17) AAS
問題の切り分けができない人は
プログラムはくめない

コレは定説だからな
296: 2018/09/17(月)11:09 ID:ivGPGa/P(1) AAS
>>286
なるほど面白いね。

レスが膨大過ぎて最初の方しか読んでなかったけど、ネイティブコードの話と思い込んでたら
.NETの話だったのかw
297: 2018/09/17(月)12:34 ID:yaPtorLJ(6/7) AAS
個人的には、C++やx87 FPUは割と知識があったけど、.NET関連は余り追いかけてなかったので、気づくのが遅れた。

managedコード、unmanagedコードについて、今回初めて調べてみたくらいだし。
298: 2018/09/17(月)12:53 ID:yaPtorLJ(7/7) AAS
>>292
ID:dj7qSZnZ」の人は理解していないね。
彼は人の事馬鹿にしてるけど・・・。
299: 2018/09/17(月)13:39 ID:F2vzl5VC(1) AAS
最初に指摘されたことだろうに。
アセンブラレベルで精度や効率に介入したきゃ.netなんて使うな、なんて分かりきったこと。
300
(1): 2018/09/17(月)14:58 ID:zCVYDMXL(1/2) AAS
エディタ使ってるとたまに Intellisense機能が効かないときがあるんだが
あれなんなの?
中間ファイルとか消せば直るの?
301
(1): 2018/09/17(月)17:03 ID:+dwRu2dr(7/8) AAS
>>300
はい。よく壊れます。
> [C++] There is an issue with the .ncb file
> Close the solution.
> Delete the . ncb file.
> Reopen the solution.
> Reopening the solution creates a new . ncb file.
> 外部リンク:msdn.microsoft.com
302: 2018/09/17(月)17:17 ID:zCVYDMXL(2/2) AAS
>>301
なるほど .ncbファイルね
今度消してやってみるわ
303: 2018/09/17(月)18:30 ID:+dwRu2dr(8/8) AAS
さて俺の本番コード、以下のようだ。
疑問は解消した。協力してくれた皆様ありがとう。

◎:拡張倍精度、○:倍精度、として、(ソースは>>191参照)
・Releaseビルドをコマンドプロンプトから起動→◎積和、◎平方根
・Debugビルドをコマンドプロンプトから起動→◎積和、○平方根
・IDEから起動→○積和、○平方根

これで3種類出来上がってた。
(なお、>>166内バイナリをアタッチした際の「AまたはC」は、「AまたはB」の間違い)
そしてIDE上で『[モジュールの読み込み中に JIT 最適化を抑制する]』を変更すると、
確かにRelease/Debugの2種類に絞れる。
省19
304
(1): 2018/09/19(水)17:24 ID:GzaYiinu(1) AAS
VC++2008だけど、突然一部のファイルだけブレークポイントが入らなくなった・・・
.ncb消したり、そのプロジェクトだけリビルドしたけど直らない
全リビルドすればおk?
1-
あと 10 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.019s