1 名前:デフォルトの名無しさん mailto:sage [2017/01/28(土) 16:46:53.58 ID:op86qfG/.net] ■Visual Studio 2015 Community & Express (無償の統合開発環境)等はこちら www.visualstudio.com/downloads/ ■コードを貼る場合はこちら ideone.com/ ■前スレ C#, C♯, C#相談室 Part91 echo.2ch.net/test/read.cgi/tech/1467211515/ ■次スレは>>970 が建てる事。 建てられない場合は他を指定する事。
855 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 22:55:07.48 ID:UJp3daw4.net] そういうのはC++使いにやらせとけ
856 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 23:32:52.23 ID:ZueE7S//.net] CPUの種類もいっぱいあるし実装すらmonoとかあるんだから考えても無駄だよ ふつーにヤレ
857 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 23:35:00.21 ID:8HEXXOrW.net] .NET 4.7でTupleも標準で使えるようになったと思ったら Windows Server 2016でまだ使えない
858 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 23:51:42.17 ID:qn5HP47l.net] >>821 4.7がまだインストールできないってこと?
859 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 00:17:56.85 ID:SWEjH6Xz.net] >>788 GCってガベージコレクタか? メモリを回収するときにゼロクリアする必要はないんじゃね。痕跡を残したくないとかなら分からないでもないが。。
860 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 07:19:22.25 ID:KckXzUzz.net] >>822 4。7って自動で入るのか?
861 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 08:29:17.03 ID:pJlkTYEJ.net] .NET Framework 4.7 is part of Windows 10 Creators Update. What about other Windows versions? You can start using .NET Framework 4.7 today on Creators Update. It will be available on other Windows versions soon. . NET Framework 4.7 will support the same Windows versions as .NET Framework 4.6.2. It is an in-place update. Windows10だけらしい
862 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 19:41:38.09 ID:zACr9/Dt.net] 4.7なんて何に使う気なんだ
863 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 19:57:13.78 ID:vwaM1ek4.net] NuGetで取ってこなくても最新の機能が使えるとか ValueTupleとかValueTaskとか 自分も試しにアップデートしてみたがまだ使えないみたいだね もうちょっと纏めてからアップデートしてくれた方がいいんだけど アップデートが細かすぎる
864 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 20:03:25.72 ID:znF0F+kk.net] >>826 何に使うのかは知らんけどtupleを使いたいんだろ
865 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 20:10:48.82 ID:pJlkTYEJ.net] 知っていると思うけど、VSインストーラ立ち上げて4.7を追加インストールします Windows10をCreatorsUpdateしてから処理したから、必須なのか不明ですが 多分それも必要です
866 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 20:19:05.97 ID:bLw6Whqv.net] Tuple<T>ってC#4.0からあったと思ったがそれじゃなく?
867 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 02:12:01.30 ID:aGMB9daN.net] >>830 それとは違う
868 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:12:37.06 ID:iCdjVYwG.net] >>818 ペンティアム2を昨今のCPUって言う人初めて見たw てか、それらはx86のRISC化なんだが、 RISCっても
869 名前:のはパイプラインを高度に利用してトランジスタを増やさずに多重実行する技術だよ パイプラインの関与と言うか、要です [] [ここ壊れてます]
870 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:16:28.45 ID:C33P0hB8.net] アセンブラできない奴はまともに最適化はできない。これだけ。
871 名前:デフォルトの名無しさん [2017/04/15(土) 10:18:54.18 ID:3qBkA9st.net] アセンブラとか老ガイジかな?
872 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:23:22.48 ID:C33P0hB8.net] c#のデバッグでなんで機械語が表示できるようになってると思ってんだ? 低脳馬鹿デジタルネイティブさん >>834
873 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:35:26.60 ID:QicJR8ZP.net] ValueTupleって最初はワクワクしたけど使い所あんましないな どういう時に使うんだこれ
874 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:36:36.36 ID:qt9qpnGQ.net] うわあ
875 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:43:55.01 ID:iCdjVYwG.net] >>836 out 使って値を返しているやつを素直に書けるだろ
876 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:49:59.89 ID:3WGNKYp+.net] >>832 まてまて、SIMDとパイプラインと並列処理は意味が違うぞ。 言いたいことはわかるけどなw
877 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:50:24.08 ID:iCdjVYwG.net] >>835 C#のILをJITがマシン語に変換して、更にCPU内部でRISC形式の命令に変換 更に命令の順番を最適化して多重実行をするわけで、ILを見たところでどれが効率高いかなど判断するのは人間業じゃないな せいぜいキャッシュサイズを意識する程度だろうが、2つのループを同時実行されることまで考慮したらどうすれば良いのやら・・・
878 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:57:05.83 ID:iCdjVYwG.net] >>839 SIMDじゃなくて、通常のオペコードをRISC的な内部オペコードに変換するんだよ で、10段とか15段に細分化されたパイプラインを使って、パイプラインに繋がった演算装置を 複数の実行ユニットが使いまわしをしてトランジスタ増やさずに見かけの同時実行数を5とかに増やす まあ、それをどうやって実現しているのかさっぱり分からんけどな
879 名前:あ mailto:sage [2017/04/15(土) 10:57:43.50 ID:4VXj2s/u.net] >>840 どこが効率悪いかはわからんか? あー、アンボクシングかかっとるわ、とか、 これのせいでストールしよるな、とか。
880 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:00:42.88 ID:iCdjVYwG.net] >>842 デバッグに使うのは当然なんだが、通常のソースレベルの効率以上の情報をILから探し出すのは至難の業です 最終的な実行環境は俺を含めてハードの素人には手を出せない神の領域かと
881 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:34:57.52 ID:QicJR8ZP.net] >>838 outはそもそも使わないし TryXxx系はValueTupleよりout varの方がスマート
882 名前:あ mailto:sage [2017/04/15(土) 11:39:27.67 ID:4VXj2s/u.net] >>843 コーディング中はそりゃ、あんまりそこに固執すると目的地にたどり着きさえしなくなっちゃうもんな。 コンパイラが賢かったり、JITが地味に賢くなって要らない小技になったのも沢山あるし。 たまに見ると面白いよ。あ、これメモ化しちゃうんだ、とか。
883 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:39:28.67 ID:UPL5S+RA.net] そうそう pythonでやってたことをc#でもできるようになったものって 実際使ってみてもいまいちなんだよな めんどくさいから欲しかった機能だけどc#流になるとそれ以上にめんどくさいしスマートじゃない
884 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:44:51.81 ID:eeh5f4V4.net] >>832 ペン2には一言も言及してないのに勝手にそうするキチガイさんですか? >>839 これも自演でしょ 多分10年以上も前からここで、板が白けきるまで偉そうな事いいながら荒らしまくっていた人なんでしょうけれど。 そろそろ死んでください。
885 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:49:23.70 ID:iCdjVYwG.net] 今回の拡張の中で ref var a = hoge
886 名前:(); と言う、参照戻り値ってのの使い方が難しいわ [] [ここ壊れてます]
887 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:51:55.21 ID:iCdjVYwG.net] >>847 >、機械語命令を別の内部用の命令に一旦変換することで互換を取っている コレはPen2とかK6辺りから始まりました 20年前の技術ですね
888 名前:デフォルトの名無しさん [2017/04/15(土) 11:52:06.28 ID:mE+AhP/n.net] 初心者です C#はメモリ管理を気にしなくて良いと聞きました 本当でしょうか?
889 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:54:00.80 ID:eeh5f4V4.net] たしかCore2以降は、VILW命令に変換していたと思った。 命令ストリームからVILW命令6スロット分に変換して 6命令ずつ同時実行する事で低クロックでも高速に動作とか。 x86系以外では、スーパースカラの採用も多いみたいだね。
890 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:55:39.30 ID:P11oDSMM.net] 本当だよ 2人くらい何か囀ってるように見えるけど、キチガイだから気にしてはいけないよ
891 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 12:00:32.47 ID:3WGNKYp+.net] >>847 俺、死ぬんか?
892 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 13:12:21.09 ID:7hkWD0i5.net] >>850 メモリ解放なんかは自動ってことになってるけど メモリ確保やら初期化やらは気にしないとだめだし「メモリ管理」の内容による
893 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 13:18:16.99 ID:GC6K0tB8.net] >>823 これ、まともに回答しようと思うとひどく大変なんだが…… 823がGCの内部実装を把握しているうえでの指摘にも見えるし、 初心者の思いつきの質問にも見えるし…… 初心者向け: ヒープ確保したら0にクリアされてる メモリを回収後、再利用されるまでに0クリアする必要があるってこと 把握してる人向け: メモリコンパクション時にページングの機構使って0クリアしてるのかってことなら、 .NET Core のソースで確認しようと思ったけど gc.cpp だけでも1.2MBあって挫折した >>850 初心者のうちは気にしなくていいよ
894 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 13:43:04.38 ID:5VFPMUgC.net] >>846 C#は式指向のシンタックスを目指してるから、あくまでステートメントに拘るPythonとはだいぶ方向性が違うよ 可能な限り全てのメソッドを式形式で定義する縛りでコーディングしてみたらいい そうすればC#7の仕様の意図するところは簡単に理解できる
895 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 14:29:19.96 ID:56TRC7nM.net] みんな詳しすぎ 頭いいんだな
896 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 14:40:07.25 ID:3WGNKYp+.net] >>842 >>843 思ったけど、あのVTuneってそんな機能あるんかな?
897 名前:デフォルトの名無しさん [2017/04/15(土) 15:19:31.88 ID:A0YDVHHt.net] 昔Excelを弄ってた時、Excelのオブジェクト解放したはずなのに 単体テストし終わってからタスクマネージャー見るとExcelが一杯残ってた(通称ゾンビ)。 シートやらブックやら解放してから最後にExcel本体解放してってやってたけど 今は一発で解放できるんだよね? メモリ管理とか気にしないけど、こういうのは気になる。
898 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 15:29:43.17 ID:8JN0d/j3.net] 所謂アンマネージリソースを閉じてないとC#であってもゾンビ化することはたまにある
899 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 15:39:12.33 ID:eeh5f4V4.net] >>859 Excelは無理だよ、細かくReleaseComObjectしなきゃ駄目だし、しても残る時は残る。 残ってしまう事を前提に組むしかない
900 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 15:41:12.30 ID:aGMB9daN.net] >>861 しても残る時は残る、はし足りないだけでは。
901 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 15:43:39.01 ID:eeh5f4V4.net] >>857 自分の書いた内容が正しいという流れになるまでしつこく続ける自演キチガイが一匹いるだけ。 もう相当昔から粘着しているからいい年だと思うんだが、よく生活できてるなって感じだな。 それ以外の人は普通だよ。
902 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 15:58:16.95 ID:3WGNKYp+.net] ちなみに俺は違うからな
903 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:02:07.82 ID:eeh5f4V4.net] 自分が得意じゃないと思う領域は黙っておけ、そして誰か
904 名前:詳しい人がレスするまで その質問を流すなキチガイ あと、自分の得意な領域に引き込もうと変な流れに作り替えるな。 掲示板が機能しなくなる どうせなら死ね とまあそんな所ですな [] [ここ壊れてます]
905 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:06:10.39 ID:OxStzCoo.net] >>863 気づいてないみたいだけど、悪いけど君の態度も相当エキセントリックに見えるよww 少なくとも>>832 は文脈的に妥当な反論をしているようにしか見えんけど、 「俺にたてつく奴はいつものキチガイ(って誰だよw)だ!!」って感じでかなり普通じゃない。 余計なお世話だろうけど、いい歳こいてるんだろうからもうちょっと自分を客観的かつ批判的に 見ることを覚えた方がいいんじゃないんだろうか。
906 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:07:40.04 ID:lvAT8XK9.net] >>859 > 昔Excelを弄ってた時、Excelのオブジェクト解放したはずなのに > 単体テストし終わってからタスクマネージャー見るとExcelが一杯残ってた(通称ゾンビ)。 ちゃんと ReleaseComObject(comObject) 呼んでないだけだろ なんで IDisposable にして Dispose で解放するようにしなかったのか謎
907 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:09:12.98 ID:eeh5f4V4.net] 駄目だな、このキチガイ・・・ はよ死ね
908 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:13:19.25 ID:C33P0hB8.net] デストラクタの動作タイミングが制御できない時点で逆にいろいろ管理できなくなってトラブルの元になってる。 結局のところ欠陥言語なのだ。
909 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:16:13.49 ID:OxStzCoo.net] >>867 根拠があるのかと言われれば正直ないけど、ぶっちゃけ全部のオブジェクトを いちいちReleaseComObject呼ぶなんてやってられないし、やらなくてもそれで 「ゾンビ」が残ることはないようだから、必要ないんじゃないのかな。 そんなことよりプロパティが返すオブジェクトをメソッドチェーン的に使わない(面倒でもいちいち変数に 入れてから使う)とか、その手の基本が大事だね
910 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:18:04.02 ID:eeh5f4V4.net] Excelのケースは多分デストラクタというより、Excelのスレッドモデルに問題があるんだと思う。 lock方式でもInvoke方式でもない、少々行き当たりばったりな排他制御をしてるようだ。 古いアプリなので今更改められないのだろうね。
911 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:31:33.32 ID:OxStzCoo.net] エンゼルハートって映画あったな 探偵がロバートデニーロに殺人鬼を探すように依頼されるが、探していた 殺人鬼は探偵自身だったってオチ 「いつものキチガイ」も実は言ってる本人自(w
912 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:33:19.87 ID:3WGNKYp+.net] はいはい、俺が悪かったってことで仲直り。 今後はこのスレ貢献に頑張ろう…でいいやん。 な
913 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:33:31.45 ID:nXYdKgHp.net] ExcelCreatorが楽すぎて戻れない
914 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:36:28.32 ID:eeh5f4V4.net] >>873 普通なら、それでOKなんだけどね この人2000年頃にやってきて、際限なく荒らしまくって誰もいない状態にしやがったから。 たまーに戻って死んだかなとか見ているんだが、ご健在のようです。(はよ死ね
915 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:57:08.88 ID:aGMB9daN.net] >>870 そんな基本は聞いたことが無いのだけど、 プロパティが返すオブジェクトをメソッドチェーン的に使うと、どういう問題があるの。
916 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 17:07:01.27 ID:mW9XRjOW.net] Disposeされないオブジェクトが量産されてリソースリークするに決まってんだろ 一つプロパティにアクセスしたら結果を変数に入れて礼儀正しくDisposeする これをすべてのメソッド呼び出しとプロパティ・インデクサーアクセスについて行う
917 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 17:09:24.07 ID:nXYdKgHp.net] >>877 おもしろい冗談だな
918 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 17:16:22.23 ID:UPL5S+RA.net] return a,b;で返したのを こんな感じで受け取れれば楽なんだけどな a,b=method(c);
919 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 17:31:49.05 ID:OxStzCoo.net] >>876 ゾンビ なんだかVBerチックなおまじないのように聞こえるけど
920 名前:そうじゃない。 もっとも、どうしてそうする必要があるのか、詳しい理屈は忘れちゃったけどw 明示的に変数で参照されてないCOMオブジェクトは相互運用アセンブリが適切に破棄できないとかなんとか まあ、変数に入れなきゃReleaseComObjectを呼ぶこともできないよね [] [ここ壊れてます]
921 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 17:33:16.72 ID:7hkWD0i5.net] excelはC++から使ってもゾンビるよ
922 名前:デフォルトの名無しさん [2017/04/15(土) 17:38:17.93 ID:A0YDVHHt.net] >>867 昔の話だよ。
923 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 17:41:04.42 ID:aGMB9daN.net] >>880 結局ReleaseComObjectは必要なのね。
924 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 17:47:17.96 ID:jssTx07C.net] >>859 昔のプログラムメンテする必要が有って、丁度それに出くわして同じ方法で対応したわ 結局そのロジック切り捨ててOpenXMLで読み書きしちゃったけど
925 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 17:54:59.95 ID:OxStzCoo.net] >>883 いやいらんと思うよ https://web-beta.archive.org/web/20080306103320/jeanne.wankuma.com/tips/programing/releasecom.html ↑によるとReleaseComObjectは「保険」らしい オブジェクトをちゃんと変数につっこんでから使えは一応ソースあった。 「仕様」の一言で、どうしてそうしなきゃらなんのかの理屈は書いてないが https://support.microsoft.com/ja-jp/help/317109/office-application-does-not-quit-after-automation-from-visual-studio-.net-client
926 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 18:00:32.55 ID:OxStzCoo.net] まあVB6みたいに参照カウント見てラッパーオブジェクトの破棄をやってるからってことなのかな こま切れのレスで申し訳ない
927 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 18:14:19.64 ID:eeh5f4V4.net] >>885 >ガベージ コレクションを実行して解放することができますが、こちらはあくまでも保険です 読んでみた限り、GCが保険でReleaseComObjectでやれという事に読めますね。 マイクロソフト公式も保証されるわけではないという感じですね。 実際、これはやってみたが上手くいかないケースはちょくちょく発生します。 次善策以上の対策は取れないと思われます。以前サポートに質問した時もそんな感じの回答でした。
928 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 18:33:54.48 ID:OxStzCoo.net] >>887 あー確かにその通りだねw 適当なこと言ってごめん
929 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 22:36:26.65 ID:tyUWSBTM.net] >>879 タプルに括弧が必要なのはやむを得ないかな。変数宣言の文法変えるわけにもいかないし。
930 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 22:56:40.40 ID:lvAT8XK9.net] >>881 ちゃんと作ればゾンビったりしないよ デストラクタで確実に解放できるからその点だけで言えば C# よりむしろ楽 >>885 > ↑によるとReleaseComObjectは「保険」らしい それ、それページ書いた人がちゃんと理解してないだけ そもそもGCはCOMなんて意識してないからCOMの解放なんてしないし 詳しくはここら辺を見て https://blogs.msdn.microsoft.com/office_client_development_support_blog/2012/02/09/office-5/
931 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 23:54:44.22 ID:X3IC3wwW.net] ググってもよくわからんのだけど GetType()+typeof()で型判定と isでやるのはどっちが速い?
932 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 00:20:09.43 ID:SqhlDt4o.net] >>891 一時変数に入れたりしないで単純な GetType == typeof の形に限り前者 JITレベルで最適化がかかるみたい
933 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 01:16:43.35 ID:dwmihMuF.net] >>855 GCのソースを見る気はしないけど0クリアはやってないと思う。 どう考えても時間の無駄。 変数を使用するタイミングで初期化が行われて、ものによってゼロクリアが行われるってだけじゃないんかね。 だから大量な領域をゼロクリアすることはそうそうないと思ってるんだけど。 例えばintの長い配列を確保したときとかくらい。
934 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 02:15:50.20 ID:UDjczAnn.net] >>893 ヒープのオブジェクトは new した時点で内容が0クリアされてることは仕様
935 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 06:55:53.07 ID:dwmihMuF.net] >>894 それはメモリ確保後に初期値で初期化されたってことででしょ。どっちにしろGCで大量にゼロクリアが必要にはならないよね。
936 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 08:00:22.29 ID:uS8rD07o.net] どーせ、一番下でVirtualAlloc走ってんでしょ。そこで0クリアなんじゃね?
937 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 08:43:50.68 ID:dr2cdwts.net] 0クリアをどのタイミングでしているかは知らないが 早めの0クリアがセキュリティーに貢献するであろう事は予想できる。 今そうでなくても、そのうちに使用しなくなったタイミングで可能なら0クリアという形になったとしても驚かない。
938 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 08:49:20.74 ID:dr2cdwts.net] ちなみに自分はガベコレが効率よく機能してくれるよう、使用しなくなったら0クリアはしている。 巨大なツリー構造を作って大量のヒープを使い始めると、参照を移動するだけでも結構なCPU時間を取られるようなので。
939 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 09:00:30.49 ID:nOhMz2bP.net] 破棄されるメモリへの(読まれない)書き込みを省略する最適化を行うコンパイラもあるし、 一律0クリアって方向にはならないだろうねぇ。 セキュリティ確保のためにわざわざ省略されない0クリアなんて機能を用意するくらいだし。
940 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 09:02:08.11 ID:H6tmXYoH.net] 0クリアとnull代入は別物だぞ
941 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 10:39:40.78 ID:yhNZe4vR.net] >>897 > 0クリアをどのタイミングでしているかは知らないが 何のためにデバッガがついてると思ってんだ。
942 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 11:27:43.64 ID:UDjczAnn.net] >>896 あー、それそれ .NET Core の gc フォルダ内のコードに VirtualAlloc の RESET_MEM で ゼロクリアしてる箇所がいくつかあった たぶん、コンパクションした後に残ったゴミ領域を VirtualAlloc で ゼロクリアしてると思うんだが、そこは探しきれなかった >>895 初期値(0)で初期化されたってのはゼロクリアなんだが…… ttp://ufcpp.net/study/csharp/rm_default.html お前の言う初期値は別のことを指してるのか? > どっちにしろGCで大量にゼロクリアが必要にはならないよね。 メモリ確保時のゼロクリアってのはヒープ管理の行うこと ヒープ管理はGCとは切り離せないの だから .NET Core のゼロクリアのコードだって gc フォルダ内に配置されてるんだし
943 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 11:44:56.24 ID:EJt90aDw.net] >>902 横からごめん。無知なので教えて。 ・GC って概要として不要になったメモリを解放する機能って理解はあってる? ・メモリ確保時に初期化が実行されるとの理解はあってる? ・一般的な挙動として、メモリ確保と GC は別物との理解に誤りはある? ※実装が GC 時に初期化しているかどうかではなく、GC と言う言葉の定義に初期化が含まれるかと言うこと 自分は上記が正しいと思ってるから、 >>895 の内容に違和感を感じなかったんだ。
944 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 12:08:09.86 ID:uS8rD07o.net] >>903 君は正しい
945 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 12:11:25.63 ID:SqhlDt4o.net] >>903 CLRの構造としては、GCはメモリ管理一般を担うコンポーネントである だからメモリ確保も初期化するのもGC GCってメモリの使用状況に応じてオブジェクトを動的に再配置したりとか色々裏で頑張ってるから、 単純に 確保/解放 と割り切れるもんじゃないんだよ
946 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 12:21:18.23 ID:qeC+G70E.net] >>891 前者でもいいけどtypeof(シールクラス)にしないとダメだよ
947 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 13:21:57.61 ID:UDjczAnn.net] >>903 >・GC って概要として不要になったメモリを解放する機能って理解はあってる? はい >・メモリ確保時に初期化が実行されるとの理解はあってる? 正確ではない ヒープからオブジェクトを確保したら初期化されていることが決まっているだけで、 初期化
948 名前:フタイミングは決まってない 既に初期化済みの領域から割り当ててるはず >・一般的な挙動として、メモリ確保と GC は別物との理解に誤りはある? > ※実装が GC 時に初期化しているかどうかではなく、GC と言う言葉の定義に初期化が含まれるかと言うこと 誤りはない ただし片方だけではメモリのシステムとして機能しない >自分は上記が正しいと思ってるから、 >>895 の内容に違和感を感じなかったんだ。 .NET の実装によるので 「GCで大量にゼロクリアが必要にはならない」 は誤り .NET Core の実装ではページングの機構を使って大量にゼロクリアしてる(と思う) オレオレCLR実装でGC時ではなく、オブジェクト確保時にゼロクリアする実装というのはあり得る [] [ここ壊れてます]
949 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 14:12:52.31 ID:0ImhO/qF.net] >>903 > GC と言う言葉の定義に初期化が含まれるかと言うこと 含まれていないけど、実質同じ。 GCってプログラマの負担を減らす為の物なのに、 いちいちゼロ初期化必要だとコンセプトとしておかしいでしょ。 まともなGCならゼロクリアされている。CLRもそう。 仕様としては、 △ > ・メモリ確保時に初期化が実行されるとの理解はあってる? ○ ・メモリ確保時には初期化済み であって、どのタイミングで初期化するかはGCの実装による。 同じ事はOSでも行われていて、以下ページのZeroed参照。 nyaruru.hatenablog.com/entry/20080430/p2
950 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 15:02:23.81 ID:79m5iU1q.net] なんかすごい重箱モードの議論だねw いや批判はしてないですよ別に
951 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 18:44:26.20 ID:dr2cdwts.net] 粘着質な人が居ると困りますねw
952 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 18:59:23.11 ID:I10lJTDS.net] >>892 ,906 そうかTHX. isの方がなんとなく速そうだと思ってたが案外そうでもないんだな
953 名前:903 mailto:sage [2017/04/16(日) 20:38:49.89 ID:EJt90aDw.net] >>904 ,905,907,908 教えてくれて、ありがとう。 自分も MSDN の文章を読んだりしてみました。 斜め読みだから読み落としてる可能性も高くそうしたらごめんなさい。 [一般的定義] ・GC は概要として不要になったメモリを解放する機能のこと ・一般的な挙動として、メモリ確保と GC は別物 [CLRの仕様] ・メモリの確保も解放も GC の機能の内 ・確保されたメモリは初期化されている [CLRの実装] ・GC 時にメモリを初期化してるっぽい ふつう、挙動を考える際には仕様を元にすると思うから 「GC時(正確にはメモリの解放時)にはメモリの 0 クリアは期待しない/できない」と理解してよさそうな気がする。 >>895 の「GCで大量にゼロクリアが必要にはならない」が「GC時に 0 クリアしている訳ではない」との意味であれば 仕様としては正しいことから一般論としても正しい。 ただ、実際にはやってくれているけど、それは仕様に基づいているわけではないからいつ改変されるか分からないアテには出来ないもの、と理解しました。 自分もよくやるんですけどね。仕様にはないけど自分が考える安全のための後始末とか。
954 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 20:52:22.64 ID:3ec5aaGF.net] 勝手に0クリアしてもいいけどGCはそれがわからないから またGCが0クリアするよ つまり二度手間 高速化なんてのたまてってるけど馬鹿ばっか
955 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 20:53:23.50 ID:3ec5aaGF.net] 無能の馬鹿の議論は飽きたわ どこか別でやってくれよ 個人のブログとか