[過去ログ]
Visual Studio 2008 Part 22 (314レス)
Visual Studio 2008 Part 22 http://mevius.5ch.net/test/read.cgi/tech/1413180800/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
256: 240 [sage] 2018/09/16(日) 23:13:48.62 ID:/oSJzlqn > だから>>252の場合の誤差なら、仕様通りなんだよ。(片方が倍精度、もう片方は拡張倍精度) そうなの? これが仕様通りならstatic版での違いは仕様通りということになる。 252はRelease版をコンソールで実行したときの逆アセンブル結果。 よって、Release版をコンソールで実行したときのみ(たまたま)レジスタ(80ビット)での演算になるので、 計算結果が変わるのはやむを得ないという結論になるのだが... ちなみに、235はDebugモードでコンパイルし、デバッガ配下の逆アセンブル
結果でしょ。 http://mevius.5ch.net/test/read.cgi/tech/1413180800/256
257: デフォルトの名無しさん [sage] 2018/09/16(日) 23:24:30.83 ID:zL1WUjLu >>256 > 252はRelease版をコンソールで実行したときの逆アセンブル結果。 それはどうやって得たの?俺はそれが出来ないから困ってる。 > ちなみに、235はDebugモードでコンパイルし、デバッガ配下の逆アセンブル結果でしょ。 235は、IDE上でReleaseモードでF5で起動し、ブレークポイントを当てて止めて逆アセンブルした結果。 俺が貼ってる逆アセンブル結果は全てこの方法で、IDEで表示されているもの。 だからIDEの表示がおかしかったら話が全部おかしくな
る。 君がIDEから独立して逆アセンブル出来ているのなら、その方法を知りたい。 こちらでも試す。 なおILSpy、グダグダ言わずに試してみたが、 当たり前だがmanaged code だとILが出る(x86ではない)ので、 俺って根本的に間違ってたかも? 今までx86のアセンブラで議論してたけど、これって .NET アプリには同梱されていないというオチ? (まあその場合は君がやっている外部逆アセンブルが単純には出来ないはずなのだが) http://mevius.5ch.net/test/read.cgi/tech/1413180800/257
258: 240 [sage] 2018/09/16(日) 23:35:36.48 ID:/oSJzlqn >> 252はRelease版をコンソールで実行したときの逆アセンブル結果。 >それはどうやって得たの?俺はそれが出来ないから困ってる。 calc_norm_and_regulateの次の行に System::Diagnostics::Debugger::Launch(); を入れてコンソールから実行すると just in time デバッグできるので、デバッガを選んだ後、 Visual Studioの 呼び出し履歴から calc_norm_and_regulate を探して移動する >> ちなみに、235はDebugモードでコンパイルし、デバッガ配下の逆アセンブル結果でしょ。
>235は、IDE上でReleaseモードでF5で起動し、ブレークポイントを当てて止めて逆アセンブルした結果。 あれ? だとすると最適化していないのでは? こちらの結果と違うのだが。 http://mevius.5ch.net/test/read.cgi/tech/1413180800/258
259: デフォルトの名無しさん [] 2018/09/16(日) 23:49:32.68 ID:SOVIz+sV とりあえず、>>198に書いてあるとおり、元のコードで再現はしてるからな その再現したコードと逆アセンブルした結果はあげとく ?-1 デフォルト設定(Release) 【コード】 #include "stdafx.h" #include <stdio.h> #include <stdint.h> #include <math.h> using namespace System; template<typename T> static double calc_norm_and_regulate(int num, T* r, bool regulate){ // <float> for debug. double norm = 0; for (
int i = 0; i < num; i++) { norm += (double)r[i] * (double)r[i]; // fprintf(stdout, "[0]0x%016llX:%.19lg\n", *(uint64_t*)&norm, norm); } fprintf(stdout, "[1]0x%016llX:%.19lg\n", *(uint64_t*)&norm, norm); norm = sqrt(norm); if (regulate) for (int i=0;i<num;i++) r[i] = (T)(r[i]/norm); return norm; } http://mevius.5ch.net/test/read.cgi/tech/1413180800/259
260: デフォルトの名無しさん [] 2018/09/16(日) 23:50:40.20 ID:SOVIz+sV ?-1 デフォルト設定(Release) 【コード】(その2) int main(array<System::String ^> ^args) { int count = 16; __int64 inputs_hex[16] = { 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x1fedb1530240aa54, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x1ff0af0d95025bc3, 0x1fc9353df6af376b, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000
000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000 }; double* inputs = (double*)inputs_hex; double norm = calc_norm_and_regulate(count, inputs, false); fprintf(stdout, "[2]0x%016llX:%.19lg\n", *(uint64_t*)&norm, norm); // Console::Write(String::Format("{0:F6}, 0x{1:x16}\r\n",norm, *(__int64*)&norm)); // Release build // 0.000000, 0x1ff68ddfb62221dd from IDE // 0.000000, 0x1ff68ddfb62221de from command prompt
return 0; } http://mevius.5ch.net/test/read.cgi/tech/1413180800/260
261: デフォルトの名無しさん [] 2018/09/16(日) 23:51:14.21 ID:SOVIz+sV ?-1 デフォルト設定(Release) 【実行結果】 ↓このコードの逆アセンブルコード https://ideone.com/Gf4qUQ [1]0x0007F2C44DFFF8F2:1.1053482540585106e-308 [2]0x1FF68DDFB62221DE:1.051355436595308e-154 http://mevius.5ch.net/test/read.cgi/tech/1413180800/261
262: デフォルトの名無しさん [] 2018/09/16(日) 23:54:13.85 ID:SOVIz+sV で、>>199に書いてあるとおり↓Debugビルドと同じ結果が再現された > ↓この下に(ループ内に)fprintf文を入れるだけで > ReleaseビルドとDebugビルドが同じ実行結果になることが確認できた > norm += (double)r[i] * (double)r[i]; ?-2 デフォルト設定(Release) 【コード】(その1) #include "stdafx.h" #include <stdio.h> #include <stdint.h> #include <math.h> using namespace System; template<typename T> static d
ouble calc_norm_and_regulate(int num, T* r, bool regulate){ // <float> for debug. double norm = 0; for (int i = 0; i < num; i++) { norm += (double)r[i] * (double)r[i]; fprintf(stdout, "[0]0x%016llX:%.19lg\n", *(uint64_t*)&norm, norm); } fprintf(stdout, "[1]0x%016llX:%.19lg\n", *(uint64_t*)&norm, norm); norm = sqrt(norm); if (regulate) for (int i=0;i<num;i++) r[i] = (T)(r[i]/norm)
; return norm; } http://mevius.5ch.net/test/read.cgi/tech/1413180800/262
263: デフォルトの名無しさん [] 2018/09/16(日) 23:54:58.60 ID:SOVIz+sV ?-2 デフォルト設定(Release) 【コード】(その2) int main(array<System::String ^> ^args) { int count = 16; __int64 inputs_hex[16] = { 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x1fedb1530240aa54, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x1ff0af0d95025bc3, 0x1fc9353df6af376b, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000
000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000 }; double* inputs = (double*)inputs_hex; double norm = calc_norm_and_regulate(count, inputs, false); fprintf(stdout, "[2]0x%016llX:%.19lg\n", *(uint64_t*)&norm, norm); // Console::Write(String::Format("{0:F6}, 0x{1:x16}\r\n",norm, *(__int64*)&norm)); // Release build // 0.000000, 0x1ff68ddfb62221dd from IDE // 0.000000, 0x1ff68ddfb62221de from command prompt
return 0; } http://mevius.5ch.net/test/read.cgi/tech/1413180800/263
264: デフォルトの名無しさん [] 2018/09/16(日) 23:56:17.88 ID:SOVIz+sV ?-2 デフォルト設定(Release) 【実行結果】 ↓このコードの逆アセンブルコード https://ideone.com/E3Nxt8 ↓実行結果を書き込めないからこっちに書き込んどいた https://ideone.com/1cky6N [1]0x0007F2C44DFFF8F1:1.1053482540585101e-308 [2]0x1FF68DDFB62221DD:1.0513554365953078e-154 以上だ http://mevius.5ch.net/test/read.cgi/tech/1413180800/264
265: デフォルトの名無しさん [sage] 2018/09/16(日) 23:58:42.66 ID:zL1WUjLu >>258 おお、そのやり方は知らなかった。大変助かった。ありがとう。 で、結果だが、>>252とは微妙に違うが、確かに拡張倍精度で計算されている。 逆アセンブル結果は、以下。 0000000e D9 EE fldz for (int i=0;i<num;i++) norm += (double)r[i] * (double)r[i]; 00000010 33 C9 xor ecx,ecx 00000012 EB 01 jmp 00000015 00000014 41 inc ecx 00000015 3B CE cmp
ecx,esi 00000017 7D 0B jge 00000024 00000019 DD 04 CF fld qword ptr [edi+ecx*8] 0000001c D9 C0 fld st(0) 0000001e DE C9 fmulp st(1),st 00000020 DE C1 faddp st(1),st 00000022 EB F0 jmp 00000014 norm = sqrt(norm); 00000024 83 EC 08 sub esp,8 00000027 DD 1C 24 fstp qword ptr [esp] 0000002a E8 49 7C F2 FF call FFF27C78 とにかく、Releaseビルドをコンソールから
起動した場合は拡張倍精度になってるのは分かった。 なら、ReleaseビルドをIDEから起動した場合は何を起動してるんだこれは? Debugビルドとも微妙にアドレス等が違うんだが。 とはいえ、これは「そもそも色々間違っている」可能性が出てきたので、もう一度全体を見直す。 明日(だけで済むとも思えないが)確認し、整理してまた投稿する。 とにかくありがとう。これはだいぶインパクトがある。(はず) http://mevius.5ch.net/test/read.cgi/tech/1413180800/265
266: デフォルトの名無しさん [sage] 2018/09/17(月) 00:49:10.27 ID:gBxGzBbQ >>265 ideとconsoleで微妙に違うバージョンのvcruntimeがロードされてるとか? process monitorで何が実行されて何がロードされてるか調べるとか? あとはwindbgから起動したら、ideとconsoleのどちらの結果と一致するのか気になる。 http://mevius.5ch.net/test/read.cgi/tech/1413180800/266
267: デフォルトの名無しさん [sage] 2018/09/17(月) 01:06:37.11 ID:+dwRu2dr >>261 だからそれは>>200と同じなんだよ。 その逆アセンブルでいうと、以下部分がメモリに出力されず、拡張倍精度で動作してるだろ。 00000281 fld qword ptr [ebp+FFFFFF14h] 00000287 fmul st,st(0) 00000289 fadd qword ptr [ebp+FFFFFF70h] 0000028f fld qword ptr [ebp+FFFFFF1Ch] 00000295 fmul st,st(0) 00000297 faddp st(1),st 00000299 fld qword ptr [ebp+FFFFFF24h] 0000029f fmul
st,st(0) 000002a1 faddp st(1),st 000002a3 fld qword ptr [ebp+FFFFFF2Ch] 000002a9 fmul st,st(0) 000002ab faddp st(1),st 000002ad fld qword ptr [ebp+FFFFFF34h] 000002b3 fmul st,st(0) 000002b5 faddp st(1),st 000002b7 fld qword ptr [ebp+FFFFFF3Ch] 000002bd fmul st,st(0) 000002bf faddp st(1),st 000002c1 fld qword ptr [ebp+FFFFFF44h] 000002c7 fmul st,st(0) 000002c9 faddp st(1),st 000002cb fld qw
ord ptr [ebp+FFFFFF4Ch] 000002d1 fmul st,st(0) 000002d3 faddp st(1),st 000002d5 fstp qword ptr [ebp+FFFFFF70h] http://mevius.5ch.net/test/read.cgi/tech/1413180800/267
268: デフォルトの名無しさん [sage] 2018/09/17(月) 01:07:41.74 ID:+dwRu2dr >>261(続き) これは少なくとも「ループ回数が8の倍数である」事がコンパイラに見えないと出来ない最適化だ。 そうでなければ、例えばループ回数が6回や14回の時に、 最初の1回だけ 0299 に飛び込んで始める(頭の2回をスキップする)コードが必要になるが、 それは出てないだろ。 (そもそもこのアンローリングがx86的に意味があるのかも疑問だが) 一般的に、可変回数ループを展開すると、必ず上記の端切れ処理(キリが良くないときの処理)が必要になる。 だか
ら「可変」だと確定しているのなら普通は展開しない。 つまり、一般的には、別関数でループ回数が引数で与えられてたら、その最適化はかからない。 今回ヒットするデータが偶々16回ループだっただけで、 俺の本番コードは可変で用いている為、 このようなアンローリングはされてない。(と思ってる。ただし265の通りもう一度確認必要) こちらではデフォでそこまで最適化がかからないのでそちらの状況はよく分からないが、 その最適化がかかってるのなら、俺の本番コードとは違う状況で動いていることになる。(はず) だから俺はその最適化がかからな
い範囲で議論してる。 それが俺が最初から別関数にしてた理由。(というか元のコードが別関数だからだが) てゆうかマジでそれデフォのままか? もしかして俺の環境がおかしくて、全く最適化されてないコードが出てる? http://mevius.5ch.net/test/read.cgi/tech/1413180800/268
269: 247 [sage] 2018/09/17(月) 01:12:11.55 ID:yaPtorLJ 今、戻った。 席を離れて思ったが、多分、C++/CLI の場合、IDEでコンパイル後、 exeファイルになっても、unmanaged コード部分以外は、本質的には .NETの共通中間言語(CIL、MSIL)になるだけで、x86のマシン語には なってないと思う。一方、昔ながらの本当のC++では、exeの中身は、 本質的には、x86のマシン語が入っていた。 C++/CLIの場合、作成されたexeは、起動時に、中間言語がx86の マシン語に直されてから実行される。その際、最適化の関係で、 どう直されるかが必ずしも一定していな
い。だから、IDEからの起動と、 コマンドラインからの起動で異なったx86命令に直されてしまう のかも知れない。 出来たx86コードが、良く最適化された場合、x87 fpu命令を長きに 渡ってメモリに書き戻さずに、st(0)〜st(7)のレジスタ上で演算し 続けられることになる。その場合、80BITの精度で計算される 期間が長くなる。 一方、x87 fpu命令に関する最適化が少し悪いか、悪くなくても命令の 使い方が変わってしまうと、80BIT(拡張double)から64BIT(double)へ 直されるタイミングや回数が変わる。 この両者では結果の精度が変わってくる。前
者の方が後者より僅か に精度が高くなる。 http://mevius.5ch.net/test/read.cgi/tech/1413180800/269
270: 243=269 [sage] 2018/09/17(月) 01:14:28.51 ID:yaPtorLJ >>269 名前欄は、「247」ではなく「243」の間違いだった。 http://mevius.5ch.net/test/read.cgi/tech/1413180800/270
271: デフォルトの名無しさん [sage] 2018/09/17(月) 01:24:06.04 ID:yaPtorLJ >>257 >なおILSpy、グダグダ言わずに試してみたが、 >当たり前だがmanaged code だとILが出る(x86ではない)ので、 >俺って根本的に間違ってたかも? >今までx86のアセンブラで議論してたけど、これって .NET アプリには同梱されていないというオチ? やはり、managed code部分は、x86命令では無く、ILにコンパイルされていて、 普通のC++とは違ってたんだ。 http://mevius.5ch.net/test/read.cgi/tech/1413180800/271
272: デフォルトの名無しさん [sage] 2018/09/17(月) 01:30:31.16 ID:yaPtorLJ >calc_norm_and_regulateをunmanaged関数にすると、違いはなくなる。 >(Releaseビルドの`をコマンドプロンプトで起動した際にも、****ddの結果となる) やはり。 unmanaged関数の場合は、CIL(MSIL)ではなく、exeの段階で既に x86マシン語に直されたものが格納されるんだろう。だとすると、起動方法に 関係なく、少なくともその部分に関しては、x87 fpu命令の使われ方が 全く同じになる。callしたsqrt()関数の中は除いて。 http://mevius.5ch.net/test/read.cgi/
tech/1413180800/272
273: デフォルトの名無しさん [] 2018/09/17(月) 01:37:20.55 ID:dj7qSZnZ >>259-260のコードも>>262-263 も同じ条件でデフォルトでコンパイルしてる コレは間違いない 一行コメントはずしてコンパイルしなおすだけだからな で、>>261、>>264みたいな結果になる >>264の実行結果はDebugビルドとまったく同じになる そのまんま http://mevius.5ch.net/test/read.cgi/tech/1413180800/273
274: デフォルトの名無しさん [sage] 2018/09/17(月) 02:03:16.26 ID:yaPtorLJ はっきり書いてある。managed code は、起動時にJITコンパイルされる。 だから、どんなマシン語に置き換わるかが、コンパイルしただけでは まだ完全には決定されてない。 https://en.wikipedia.org/wiki/Managed_code Drawbacks include slower startup speed (the managed code must be JIT compiled by the VM) and generally increased use of system resources on any machine that is executing the code. managed code は、VMによって、JIT コンパイルされない
といけないので、 起動速度が遅くなり、かつ、一般的に、システム・リソースの使用が増える。 http://mevius.5ch.net/test/read.cgi/tech/1413180800/274
275: デフォルトの名無しさん [] 2018/09/17(月) 02:49:02.18 ID:dj7qSZnZ 普通のコンソールアプリケーション(CLRじゃないほう)でも 同じコードで普通にまったく同じように再現するワケだが ホントなキミラはなにを頭悪いことばっかりいってんの? 実行結果だけははっといてやるが http://mevius.5ch.net/test/read.cgi/tech/1413180800/275
276: デフォルトの名無しさん [] 2018/09/17(月) 02:50:12.89 ID:dj7qSZnZ ?-1 デフォルト設定(Release) 【コード】(その1) #include "stdafx.h" #include <stdio.h> #include <stdint.h> #include <math.h> template<typename T> static double calc_norm_and_regulate(int num, T* r, bool regulate){ // <float> for debug. double norm = 0; for (int i = 0; i < num; i++) { norm += (double)r[i] * (double)r[i]; // fprintf(stdout, "[0]0x%016llX:%.19lg
\n", *(uint64_t*)&norm, norm); } fprintf(stdout, "[1]0x%016llX:%.19lg\n", *(uint64_t*)&norm, norm); norm = sqrt(norm); if (regulate) for (int i=0;i<num;i++) r[i] = (T)(r[i]/norm); return norm; } http://mevius.5ch.net/test/read.cgi/tech/1413180800/276
277: デフォルトの名無しさん [] 2018/09/17(月) 02:50:37.91 ID:dj7qSZnZ ?-1 デフォルト設定(Release) 【コード】(その2) int _tmain(int argc, _TCHAR* argv[]) { int count = 16; __int64 inputs_hex[16] = { 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x1fedb1530240aa54, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x1ff0af0d95025bc3, 0x1fc9353df6af376b, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000
000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000 }; double* inputs = (double*)inputs_hex; double norm = calc_norm_and_regulate(count, inputs, false); fprintf(stdout, "[2]0x%016llX:%.19lg\n", *(uint64_t*)&norm, norm); return 0; } http://mevius.5ch.net/test/read.cgi/tech/1413180800/277
278: デフォルトの名無しさん [] 2018/09/17(月) 02:51:12.35 ID:dj7qSZnZ ?-1 デフォルト設定(Release) 【実行結果】 ↓このコードの逆アセンブルコード https://ideone.com/Dqqn6J [1]0x0007F2C44DFFF8F2:1.1053482540585106e-308 [2]0x1FF68DDFB62221DE:1.051355436595308e-154 http://mevius.5ch.net/test/read.cgi/tech/1413180800/278
279: デフォルトの名無しさん [] 2018/09/17(月) 02:51:53.99 ID:dj7qSZnZ ?-2 デフォルト設定(Release) 【コード】(その1) #include "stdafx.h" #include <stdio.h> #include <stdint.h> #include <math.h> template<typename T> static double calc_norm_and_regulate(int num, T* r, bool regulate){ // <float> for debug. double norm = 0; for (int i = 0; i < num; i++) { norm += (double)r[i] * (double)r[i]; // fprintf(stdout, "[0]0x%016llX:%.19lg
\n", *(uint64_t*)&norm, norm); } fprintf(stdout, "[1]0x%016llX:%.19lg\n", *(uint64_t*)&norm, norm); norm = sqrt(norm); if (regulate) for (int i=0;i<num;i++) r[i] = (T)(r[i]/norm); return norm; } http://mevius.5ch.net/test/read.cgi/tech/1413180800/279
280: デフォルトの名無しさん [] 2018/09/17(月) 02:52:10.55 ID:dj7qSZnZ ?-2 デフォルト設定(Release) 【コード】(その2) int _tmain(int argc, _TCHAR* argv[]) { int count = 16; __int64 inputs_hex[16] = { 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x1fedb1530240aa54, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x1ff0af0d95025bc3, 0x1fc9353df6af376b, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000
000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000 }; double* inputs = (double*)inputs_hex; double norm = calc_norm_and_regulate(count, inputs, false); fprintf(stdout, "[2]0x%016llX:%.19lg\n", *(uint64_t*)&norm, norm); return 0; } http://mevius.5ch.net/test/read.cgi/tech/1413180800/280
281: デフォルトの名無しさん [] 2018/09/17(月) 02:52:25.20 ID:dj7qSZnZ ?-2 デフォルト設定(Release) 【実行結果】 ↓このコードの逆アセンブルコード https://ideone.com/5OaUe6 ↓実行結果を書き込めないからこっちに書き込んどいた https://ideone.com/FFW0P0 [1]0x0007F2C44DFFF8F1:1.1053482540585101e-308 [2]0x1FF68DDFB62221DD:1.0513554365953078e-154 http://mevius.5ch.net/test/read.cgi/tech/1413180800/281
282: デフォルトの名無しさん [] 2018/09/17(月) 02:53:45.62 ID:dj7qSZnZ ?-2 デフォルト設定(Release) 【コード】(その1) #include "stdafx.h" #include <stdio.h> #include <stdint.h> #include <math.h> template<typename T> static double calc_norm_and_regulate(int num, T* r, bool regulate){ // <float> for debug. double norm = 0; for (int i = 0; i < num; i++) { norm += (double)r[i] * (double)r[i]; fprintf(stdout, "[0]0x%016llX:%.19lg\n
", *(uint64_t*)&norm, norm); } fprintf(stdout, "[1]0x%016llX:%.19lg\n", *(uint64_t*)&norm, norm); norm = sqrt(norm); if (regulate) for (int i=0;i<num;i++) r[i] = (T)(r[i]/norm); return norm; } http://mevius.5ch.net/test/read.cgi/tech/1413180800/282
283: デフォルトの名無しさん [] 2018/09/17(月) 02:54:34.82 ID:dj7qSZnZ (正)>>282 (誤)>>279 http://mevius.5ch.net/test/read.cgi/tech/1413180800/283
284: デフォルトの名無しさん [] 2018/09/17(月) 02:57:46.48 ID:dj7qSZnZ >>276-277のコードも>>282,280のコードも も同じ条件でデフォルトでコンパイルしてる 一行コメントはずしてコンパイルしなおすだけだからな で、>>278、>>281みたいな結果になる >>281の実行結果はDebugビルドとまったく同じになる そのまんま CLRのとき(>>273)の動作とまったく同じ キミラはずーっとなにやってるわけ? http://mevius.5ch.net/test/read.cgi/tech/1413180800/284
285: デフォルトの名無しさん [sage] 2018/09/17(月) 09:44:34.76 ID:yu1Dprt2 >>284 同一のreleaseをコンソールで実行するかデバッガで実行するかで結果が異なるのはなぜだろう。 という話をしていたのであって、 debug/releaseで別の結果になることを問題にしているのではないです。 http://mevius.5ch.net/test/read.cgi/tech/1413180800/285
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 29 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.019s