[過去ログ]
Visual Studio 2008 Part 22 (314レス)
Visual Studio 2008 Part 22 http://mevius.5ch.net/test/read.cgi/tech/1413180800/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
228: デフォルトの名無しさん [sage] 2018/09/16(日) 16:06:05.39 ID:zL1WUjLu すまん、間違いの修正 >>224 × > どうやらこれが原因の可能性が出てきた。(はっきり言って俺のバグだが) × > まあこれに当たっているのなら確実に俺のバグだし、これなら辻褄は合ってしまうのだが。 今回は俺はあくまで俺の本番コードのデバッグを念頭に置いていて、この発言だった。 ただし>>191の再現コードで『不定スタック領域』を掴んでいるわけもなく、 一応IDE起動とコマンドプロンプト起動での挙動の違いを再現出来ているわけだから、 これだけが問題ではないのも事実だ。 俺にとっては一つ新しい知見として、 ・IDEから起動した場合、スタックが初期化されるっぽい ということが分かった。とはいえOSは0fillしてから各プロセスにメモリを与えるので、実際は、 ・コマンドプロンプト起動ならmain前に設定した続きでそのまま実行、 ・IDE起動ならmain前に色々やって0fillして実行、 或いはmain前に色々やることが多く、スタックが進み、(例えばデバッガをアタッチする為) 結果的にOSが初期化済みの領域から始動 となって違いが発生するというところか。 http://mevius.5ch.net/test/read.cgi/tech/1413180800/228
249: デフォルトの名無しさん [sage] 2018/09/16(日) 20:54:27.39 ID:zL1WUjLu >>240 さて再見したが、やはりstaticだけで直る理由は分からない。 なお、最適化ミスの場合は、逆アセンブラを読めば分かる。 今のところそれではない。 一応、>>191ソースのtemplate部の逆アセンブルを上げておく。(ただし重複するので頭のみ) 頭はこれ。続きが>>235,236。 template<typename T> static double calc_norm_and_regulate(int num, T* r, bool regulate){ // <float> for debug. double norm = 0; 00000000 55 push ebp 00000001 8B EC mov ebp,esp 00000003 83 EC 28 sub esp,28h 00000006 89 4D FC mov dword ptr [ebp-4],ecx 00000009 89 55 F8 mov dword ptr [ebp-8],edx 0000000c 83 3D 14 2E 76 00 00 cmp dword ptr ds:[00762E14h],0 00000013 74 05 je 0000001A 00000015 E8 FF 52 1B 68 call 681B5319 0000001a 33 D2 xor edx,edx 0000001c 89 55 E8 mov dword ptr [ebp-18h],edx 0000001f 33 D2 xor edx,edx 00000021 89 55 EC mov dword ptr [ebp-14h],edx 00000024 D9 EE fldz 00000026 DD 5D F0 fstp qword ptr [ebp-10h] 00000029 D9 EE fldz 0000002b DD 5D E0 fstp qword ptr [ebp-20h] 0000002e D9 EE fldz 00000030 DD 5D F0 fstp qword ptr [ebp-10h] http://mevius.5ch.net/test/read.cgi/tech/1413180800/249
286: デフォルトの名無しさん [sage] 2018/09/17(月) 10:25:22.39 ID:+dwRu2dr >>191がコンソール起動とIDE起動で挙動が異なる理由は分かりました。 ありがとう。 結論はつまり以下だ。 > JIT の最適化とデバッグ(抜粋) > マネージ アプリケーションをデバッグするとき、Visual Studio では、既定で、 > ジャスト イン タイム (JIT: Just-In-Time) コードの最適化が省略されています。 > 最適化されたコードをデバッグするのは困難であるため、 > 最適化されたコードで発生するバグが、非最適化バージョンでは再現しないときにのみお勧めします。 > JIT 最適化は、Visual Studio の [モジュールの読み込み中に JIT 最適化を抑制する] オプションで制御されます。 > 実行中のプロセスにアタッチする場合、既に読み込まれ、JIT でコンパイルされ、 > 最適化されているコードが含まれることがあります。 > このようなコードの場合、[モジュールの読み込み中に JIT 最適化を抑制する] オプションの影響はありません。 > https://msdn.microsoft.com/ja-jp/library/ms241594.aspx 確かにこのオプションで直った。 http://mevius.5ch.net/test/read.cgi/tech/1413180800/286
290: デフォルトの名無しさん [] 2018/09/17(月) 10:32:49.39 ID:dj7qSZnZ ちなみにオレがあげた結果は すべてリリースビルドの結果だからな デバッグビルドの結果なんかあげても 意味ないからな http://mevius.5ch.net/test/read.cgi/tech/1413180800/290
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
1.184s*