C#, C♯, C#相談室 Part92 [無断転載禁止]©5ch.io
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん
2017/01/28(土) 16:46:53.58ID:op86qfG/http://www.visualstudio.com/downloads/
■コードを貼る場合はこちら
http://ideone.com/
■前スレ
C#, C♯, C#相談室 Part91
http://echo.2ch.net/test/read.cgi/tech/1467211515/
■次スレは>>970が建てる事。
建てられない場合は他を指定する事。
0809デフォルトの名無しさん
2017/04/13(木) 19:49:41.71ID:woBc/tdN> メモリーにアクセスするとCPU命令で数千命令程度の待ちが入る
今時のメモリー(主記憶)のレイテンシーって10ns以下だと思うが10nsで1,000命令も実行できるCPU教えてくれ
0810デフォルトの名無しさん
2017/04/13(木) 20:53:44.12ID:FNNFGlTuまぁ、その手の事を指摘したつもりだけれどそう読んではくれないみたいだね。
あと、最近のはパイプライン以外にも命令の並べ替えやら入っているからw
ホコポコ無意味に返信している内容は、多分自演なんだろうけど、そろそろやめたら。
こういうのはゲーム作ったことあるような人間なら常識の範囲なので、考えるまでもないような話の類。
俺以外のヤツもたくさん指摘しているが、それだけ普通に知っている人は多い話なのだよ。
0811デフォルトの名無しさん
2017/04/13(木) 21:04:00.56ID:1tPgrneGアセンブラのバイトコード気にするとか20年前の話だろ
いっぽかたが計算してる間に他のCPUで書き込みするのは
同時にメモリに書き込もうとして競合するのを避けるためじゃないん
0812デフォルトの名無しさん
2017/04/13(木) 21:15:04.20ID:FNNFGlTuこの手の話をゲーム屋が知ってるのは、何かの本で読んだとかではなくて
ソニーとか任天堂とかマイクロソフトとか今は逝ってしまっているセガとかハード屋が
セミナーで現在のハードの状況と止めた方が良いコードなんかのヒントとして教えてくれるからなんだよ。
その知識を持って、インテルの資料とかを読めば大体の事は分かるんよ。
もちろん素から勉強している人も居るだろうけどね。
今回の話はマシン語ではなく、最近のメモリー事情の話なんだよ。
連続アドレスの書き込みor読み出しには強いが、飛び飛びのアドレスにアクセスすると弱いダイナミックメモリー事情とかの話。
メモリフィルとか連続アドレスをアクセスしているのに、わざわざ壊すようなマルチスレッドはそういう点でも駄目なんだな。
決定的にはメモリーが遅いという点に尽きるが。
こんな風に駄目な理由に一つ以上のネタがあるんだよ、だからやるまでもないの。
0813デフォルトの名無しさん
2017/04/13(木) 21:29:31.37ID:1tPgrneGパイプラインで境界チェックを解決って意味が分からん
どうやってんの
0814デフォルトの名無しさん
2017/04/13(木) 21:32:07.91ID:3oML3qaoこれ以上口を聞くとスレを埋めるぞ
0815デフォルトの名無しさん
2017/04/13(木) 21:46:56.27ID:2TLG8dmEパイプラインがRISC時代に進化して、レジスタが干渉しなければインストラクションを同時実行するようになったから
件の例だとメモリクリアと境界チェックを同時にヤるんだわ
だから一つのCPUは見かけ上メモリクリアを境界チェックの時間0で延々と実行する
コレを実行するのは一つのCPUだし、同時実行に人が介在すること無いのでプログラマーは何もヤることはありません
ホント>>796は酷い出鱈目ですわ
0816デフォルトの名無しさん
2017/04/13(木) 22:00:11.37ID:oixKZUzLただ昨日書いた>>776が間違ってることはよくわかった。
よく考えればこれ486の時代とかでも当たり前だw
すまんかった
0817デフォルトの名無しさん
2017/04/13(木) 22:00:58.20ID:FNNFGlTu>境界チェックくらいなら、書き込み待ち時間で十分にできるから他のCPUにまで影響を与えないようにして
これがパイプラインやらディレイスロットに相当する話として描いたんだよ
計算時間隠ぺいはパイプラインだけじゃないからな、不正確になるだろ。
0818デフォルトの名無しさん
2017/04/13(木) 22:08:08.05ID:FNNFGlTuこの変換で色々な隠ぺい処理がされる。
パイプラインの直接関与は無い。
0819デフォルトの名無しさん
2017/04/13(木) 22:55:07.48ID:UJp3daw40820デフォルトの名無しさん
2017/04/13(木) 23:32:52.23ID:ZueE7S//ふつーにヤレ
0821デフォルトの名無しさん
2017/04/13(木) 23:35:00.21ID:8HEXXOrWWindows Server 2016でまだ使えない
0822デフォルトの名無しさん
2017/04/13(木) 23:51:42.17ID:qn5HP47l4.7がまだインストールできないってこと?
0823デフォルトの名無しさん
2017/04/14(金) 00:17:56.85ID:SWEjH6XzGCってガベージコレクタか?
メモリを回収するときにゼロクリアする必要はないんじゃね。痕跡を残したくないとかなら分からないでもないが。。
0824デフォルトの名無しさん
2017/04/14(金) 07:19:22.25ID:KckXzUzz4。7って自動で入るのか?
0825デフォルトの名無しさん
2017/04/14(金) 08:29:17.03ID:pJlkTYEJYou 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だけらしい
0826デフォルトの名無しさん
2017/04/14(金) 19:41:38.09ID:zACr9/Dt0827デフォルトの名無しさん
2017/04/14(金) 19:57:13.78ID:vwaM1ek4ValueTupleとかValueTaskとか
自分も試しにアップデートしてみたがまだ使えないみたいだね
もうちょっと纏めてからアップデートしてくれた方がいいんだけど
アップデートが細かすぎる
0828デフォルトの名無しさん
2017/04/14(金) 20:03:25.72ID:znF0F+kk何に使うのかは知らんけどtupleを使いたいんだろ
0829デフォルトの名無しさん
2017/04/14(金) 20:10:48.82ID:pJlkTYEJWindows10をCreatorsUpdateしてから処理したから、必須なのか不明ですが
多分それも必要です
0830デフォルトの名無しさん
2017/04/14(金) 20:19:05.97ID:bLw6Whqv0831デフォルトの名無しさん
2017/04/15(土) 02:12:01.30ID:aGMB9daNそれとは違う
0832デフォルトの名無しさん
2017/04/15(土) 10:12:37.06ID:iCdjVYwGペンティアム2を昨今のCPUって言う人初めて見たw
てか、それらはx86のRISC化なんだが、
RISCってものはパイプラインを高度に利用してトランジスタを増やさずに多重実行する技術だよ
パイプラインの関与と言うか、要です
0833デフォルトの名無しさん
2017/04/15(土) 10:16:28.45ID:C33P0hB80834デフォルトの名無しさん
2017/04/15(土) 10:18:54.18ID:3qBkA9st0835デフォルトの名無しさん
2017/04/15(土) 10:23:22.48ID:C33P0hB80836デフォルトの名無しさん
2017/04/15(土) 10:35:26.60ID:QicJR8ZPどういう時に使うんだこれ
0837デフォルトの名無しさん
2017/04/15(土) 10:36:36.36ID:qt9qpnGQ0838デフォルトの名無しさん
2017/04/15(土) 10:43:55.01ID:iCdjVYwGout 使って値を返しているやつを素直に書けるだろ
0839デフォルトの名無しさん
2017/04/15(土) 10:49:59.89ID:3WGNKYp+まてまて、SIMDとパイプラインと並列処理は意味が違うぞ。
言いたいことはわかるけどなw
0840デフォルトの名無しさん
2017/04/15(土) 10:50:24.08ID:iCdjVYwGC#のILをJITがマシン語に変換して、更にCPU内部でRISC形式の命令に変換
更に命令の順番を最適化して多重実行をするわけで、ILを見たところでどれが効率高いかなど判断するのは人間業じゃないな
せいぜいキャッシュサイズを意識する程度だろうが、2つのループを同時実行されることまで考慮したらどうすれば良いのやら・・・
0841デフォルトの名無しさん
2017/04/15(土) 10:57:05.83ID:iCdjVYwGSIMDじゃなくて、通常のオペコードをRISC的な内部オペコードに変換するんだよ
で、10段とか15段に細分化されたパイプラインを使って、パイプラインに繋がった演算装置を
複数の実行ユニットが使いまわしをしてトランジスタ増やさずに見かけの同時実行数を5とかに増やす
まあ、それをどうやって実現しているのかさっぱり分からんけどな
0842あ
2017/04/15(土) 10:57:43.50ID:4VXj2s/uどこが効率悪いかはわからんか?
あー、アンボクシングかかっとるわ、とか、
これのせいでストールしよるな、とか。
0843デフォルトの名無しさん
2017/04/15(土) 11:00:42.88ID:iCdjVYwGデバッグに使うのは当然なんだが、通常のソースレベルの効率以上の情報をILから探し出すのは至難の業です
最終的な実行環境は俺を含めてハードの素人には手を出せない神の領域かと
0844デフォルトの名無しさん
2017/04/15(土) 11:34:57.52ID:QicJR8ZPoutはそもそも使わないし
TryXxx系はValueTupleよりout varの方がスマート
0845あ
2017/04/15(土) 11:39:27.67ID:4VXj2s/uコーディング中はそりゃ、あんまりそこに固執すると目的地にたどり着きさえしなくなっちゃうもんな。
コンパイラが賢かったり、JITが地味に賢くなって要らない小技になったのも沢山あるし。
たまに見ると面白いよ。あ、これメモ化しちゃうんだ、とか。
0846デフォルトの名無しさん
2017/04/15(土) 11:39:28.67ID:UPL5S+RApythonでやってたことをc#でもできるようになったものって
実際使ってみてもいまいちなんだよな
めんどくさいから欲しかった機能だけどc#流になるとそれ以上にめんどくさいしスマートじゃない
0847デフォルトの名無しさん
2017/04/15(土) 11:44:51.81ID:eeh5f4V4ペン2には一言も言及してないのに勝手にそうするキチガイさんですか? >>839 これも自演でしょ
多分10年以上も前からここで、板が白けきるまで偉そうな事いいながら荒らしまくっていた人なんでしょうけれど。
そろそろ死んでください。
0848デフォルトの名無しさん
2017/04/15(土) 11:49:23.70ID:iCdjVYwGref var a = hoge();
と言う、参照戻り値ってのの使い方が難しいわ
0849デフォルトの名無しさん
2017/04/15(土) 11:51:55.21ID:iCdjVYwG>、機械語命令を別の内部用の命令に一旦変換することで互換を取っている
コレはPen2とかK6辺りから始まりました
20年前の技術ですね
0850デフォルトの名無しさん
2017/04/15(土) 11:52:06.28ID:mE+AhP/nC#はメモリ管理を気にしなくて良いと聞きました
本当でしょうか?
0851デフォルトの名無しさん
2017/04/15(土) 11:54:00.80ID:eeh5f4V4命令ストリームからVILW命令6スロット分に変換して
6命令ずつ同時実行する事で低クロックでも高速に動作とか。
x86系以外では、スーパースカラの採用も多いみたいだね。
0852デフォルトの名無しさん
2017/04/15(土) 11:55:39.30ID:P11oDSMM2人くらい何か囀ってるように見えるけど、キチガイだから気にしてはいけないよ
0853デフォルトの名無しさん
2017/04/15(土) 12:00:32.47ID:3WGNKYp+俺、死ぬんか?
0854デフォルトの名無しさん
2017/04/15(土) 13:12:21.09ID:7hkWD0i5メモリ解放なんかは自動ってことになってるけど
メモリ確保やら初期化やらは気にしないとだめだし「メモリ管理」の内容による
0855デフォルトの名無しさん
2017/04/15(土) 13:18:16.99ID:GC6K0tB8これ、まともに回答しようと思うとひどく大変なんだが……
823がGCの内部実装を把握しているうえでの指摘にも見えるし、
初心者の思いつきの質問にも見えるし……
初心者向け:
ヒープ確保したら0にクリアされてる
メモリを回収後、再利用されるまでに0クリアする必要があるってこと
把握してる人向け:
メモリコンパクション時にページングの機構使って0クリアしてるのかってことなら、
.NET Core のソースで確認しようと思ったけど
gc.cpp だけでも1.2MBあって挫折した
>>850
初心者のうちは気にしなくていいよ
0856デフォルトの名無しさん
2017/04/15(土) 13:43:04.38ID:5VFPMUgCC#は式指向のシンタックスを目指してるから、あくまでステートメントに拘るPythonとはだいぶ方向性が違うよ
可能な限り全てのメソッドを式形式で定義する縛りでコーディングしてみたらいい
そうすればC#7の仕様の意図するところは簡単に理解できる
0857デフォルトの名無しさん
2017/04/15(土) 14:29:19.96ID:56TRC7nM頭いいんだな
0858デフォルトの名無しさん
2017/04/15(土) 14:40:07.25ID:3WGNKYp+>>843
思ったけど、あのVTuneってそんな機能あるんかな?
0859デフォルトの名無しさん
2017/04/15(土) 15:19:31.88ID:A0YDVHHt単体テストし終わってからタスクマネージャー見るとExcelが一杯残ってた(通称ゾンビ)。
シートやらブックやら解放してから最後にExcel本体解放してってやってたけど
今は一発で解放できるんだよね?
メモリ管理とか気にしないけど、こういうのは気になる。
0860デフォルトの名無しさん
2017/04/15(土) 15:29:43.17ID:8JN0d/j30861デフォルトの名無しさん
2017/04/15(土) 15:39:12.33ID:eeh5f4V4Excelは無理だよ、細かくReleaseComObjectしなきゃ駄目だし、しても残る時は残る。
残ってしまう事を前提に組むしかない
0862デフォルトの名無しさん
2017/04/15(土) 15:41:12.30ID:aGMB9daNしても残る時は残る、はし足りないだけでは。
0863デフォルトの名無しさん
2017/04/15(土) 15:43:39.01ID:eeh5f4V4自分の書いた内容が正しいという流れになるまでしつこく続ける自演キチガイが一匹いるだけ。
もう相当昔から粘着しているからいい年だと思うんだが、よく生活できてるなって感じだな。
それ以外の人は普通だよ。
0864デフォルトの名無しさん
2017/04/15(土) 15:58:16.95ID:3WGNKYp+0865デフォルトの名無しさん
2017/04/15(土) 16:02:07.82ID:eeh5f4V4その質問を流すなキチガイ
あと、自分の得意な領域に引き込もうと変な流れに作り替えるな。
掲示板が機能しなくなる
どうせなら死ね
とまあそんな所ですな
0866デフォルトの名無しさん
2017/04/15(土) 16:06:10.39ID:OxStzCoo気づいてないみたいだけど、悪いけど君の態度も相当エキセントリックに見えるよww
少なくとも>>832は文脈的に妥当な反論をしているようにしか見えんけど、
「俺にたてつく奴はいつものキチガイ(って誰だよw)だ!!」って感じでかなり普通じゃない。
余計なお世話だろうけど、いい歳こいてるんだろうからもうちょっと自分を客観的かつ批判的に
見ることを覚えた方がいいんじゃないんだろうか。
0867デフォルトの名無しさん
2017/04/15(土) 16:07:40.04ID:lvAT8XK9> 昔Excelを弄ってた時、Excelのオブジェクト解放したはずなのに
> 単体テストし終わってからタスクマネージャー見るとExcelが一杯残ってた(通称ゾンビ)。
ちゃんと ReleaseComObject(comObject) 呼んでないだけだろ
なんで IDisposable にして Dispose で解放するようにしなかったのか謎
0868デフォルトの名無しさん
2017/04/15(土) 16:09:12.98ID:eeh5f4V4はよ死ね
0869デフォルトの名無しさん
2017/04/15(土) 16:13:19.25ID:C33P0hB8結局のところ欠陥言語なのだ。
0870デフォルトの名無しさん
2017/04/15(土) 16:16:13.49ID:OxStzCoo根拠があるのかと言われれば正直ないけど、ぶっちゃけ全部のオブジェクトを
いちいちReleaseComObject呼ぶなんてやってられないし、やらなくてもそれで
「ゾンビ」が残ることはないようだから、必要ないんじゃないのかな。
そんなことよりプロパティが返すオブジェクトをメソッドチェーン的に使わない(面倒でもいちいち変数に
入れてから使う)とか、その手の基本が大事だね
0871デフォルトの名無しさん
2017/04/15(土) 16:18:04.02ID:eeh5f4V4lock方式でもInvoke方式でもない、少々行き当たりばったりな排他制御をしてるようだ。
古いアプリなので今更改められないのだろうね。
0872デフォルトの名無しさん
2017/04/15(土) 16:31:33.32ID:OxStzCoo探偵がロバートデニーロに殺人鬼を探すように依頼されるが、探していた
殺人鬼は探偵自身だったってオチ
「いつものキチガイ」も実は言ってる本人自(w
0873デフォルトの名無しさん
2017/04/15(土) 16:33:19.87ID:3WGNKYp+今後はこのスレ貢献に頑張ろう…でいいやん。
な
0874デフォルトの名無しさん
2017/04/15(土) 16:33:31.45ID:nXYdKgHp0875デフォルトの名無しさん
2017/04/15(土) 16:36:28.32ID:eeh5f4V4普通なら、それでOKなんだけどね
この人2000年頃にやってきて、際限なく荒らしまくって誰もいない状態にしやがったから。
たまーに戻って死んだかなとか見ているんだが、ご健在のようです。(はよ死ね
0876デフォルトの名無しさん
2017/04/15(土) 16:57:08.88ID:aGMB9daNそんな基本は聞いたことが無いのだけど、
プロパティが返すオブジェクトをメソッドチェーン的に使うと、どういう問題があるの。
0877デフォルトの名無しさん
2017/04/15(土) 17:07:01.27ID:mW9XRjOW一つプロパティにアクセスしたら結果を変数に入れて礼儀正しくDisposeする
これをすべてのメソッド呼び出しとプロパティ・インデクサーアクセスについて行う
0878デフォルトの名無しさん
2017/04/15(土) 17:09:24.07ID:nXYdKgHpおもしろい冗談だな
0879デフォルトの名無しさん
2017/04/15(土) 17:16:22.23ID:UPL5S+RAこんな感じで受け取れれば楽なんだけどな
a,b=method(c);
0880デフォルトの名無しさん
2017/04/15(土) 17:31:49.05ID:OxStzCooゾンビ
なんだかVBerチックなおまじないのように聞こえるけどそうじゃない。
もっとも、どうしてそうする必要があるのか、詳しい理屈は忘れちゃったけどw
明示的に変数で参照されてないCOMオブジェクトは相互運用アセンブリが適切に破棄できないとかなんとか
まあ、変数に入れなきゃReleaseComObjectを呼ぶこともできないよね
0881デフォルトの名無しさん
2017/04/15(土) 17:33:16.72ID:7hkWD0i50882デフォルトの名無しさん
2017/04/15(土) 17:38:17.93ID:A0YDVHHt昔の話だよ。
0883デフォルトの名無しさん
2017/04/15(土) 17:41:04.42ID:aGMB9daN結局ReleaseComObjectは必要なのね。
0884デフォルトの名無しさん
2017/04/15(土) 17:47:17.96ID:jssTx07C昔のプログラムメンテする必要が有って、丁度それに出くわして同じ方法で対応したわ
結局そのロジック切り捨ててOpenXMLで読み書きしちゃったけど
0885デフォルトの名無しさん
2017/04/15(土) 17:54:59.95ID:OxStzCooいやいらんと思うよ
https://web-beta.archive.org/web/20080306103320/http://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
0886デフォルトの名無しさん
2017/04/15(土) 18:00:32.55ID:OxStzCooこま切れのレスで申し訳ない
0887デフォルトの名無しさん
2017/04/15(土) 18:14:19.64ID:eeh5f4V4>ガベージ コレクションを実行して解放することができますが、こちらはあくまでも保険です
読んでみた限り、GCが保険でReleaseComObjectでやれという事に読めますね。
マイクロソフト公式も保証されるわけではないという感じですね。
実際、これはやってみたが上手くいかないケースはちょくちょく発生します。
次善策以上の対策は取れないと思われます。以前サポートに質問した時もそんな感じの回答でした。
0888デフォルトの名無しさん
2017/04/15(土) 18:33:54.48ID:OxStzCooあー確かにその通りだねw
適当なこと言ってごめん
0889デフォルトの名無しさん
2017/04/15(土) 22:36:26.65ID:tyUWSBTMタプルに括弧が必要なのはやむを得ないかな。変数宣言の文法変えるわけにもいかないし。
0890デフォルトの名無しさん
2017/04/15(土) 22:56:40.40ID:lvAT8XK9ちゃんと作ればゾンビったりしないよ
デストラクタで確実に解放できるからその点だけで言えば C# よりむしろ楽
>>885
> ↑によるとReleaseComObjectは「保険」らしい
それ、それページ書いた人がちゃんと理解してないだけ
そもそもGCはCOMなんて意識してないからCOMの解放なんてしないし
詳しくはここら辺を見て
https://blogs.msdn.microsoft.com/office_client_development_support_blog/2012/02/09/office-5/
0891デフォルトの名無しさん
2017/04/15(土) 23:54:44.22ID:X3IC3wwWGetType()+typeof()で型判定と
isでやるのはどっちが速い?
0892デフォルトの名無しさん
2017/04/16(日) 00:20:09.43ID:SqhlDt4o一時変数に入れたりしないで単純な GetType == typeof の形に限り前者
JITレベルで最適化がかかるみたい
0893デフォルトの名無しさん
2017/04/16(日) 01:16:43.35ID:dwmihMuFGCのソースを見る気はしないけど0クリアはやってないと思う。
どう考えても時間の無駄。
変数を使用するタイミングで初期化が行われて、ものによってゼロクリアが行われるってだけじゃないんかね。
だから大量な領域をゼロクリアすることはそうそうないと思ってるんだけど。
例えばintの長い配列を確保したときとかくらい。
0894デフォルトの名無しさん
2017/04/16(日) 02:15:50.20ID:UDjczAnnヒープのオブジェクトは new した時点で内容が0クリアされてることは仕様
0895デフォルトの名無しさん
2017/04/16(日) 06:55:53.07ID:dwmihMuFそれはメモリ確保後に初期値で初期化されたってことででしょ。どっちにしろGCで大量にゼロクリアが必要にはならないよね。
0896デフォルトの名無しさん
2017/04/16(日) 08:00:22.29ID:uS8rD07o0897デフォルトの名無しさん
2017/04/16(日) 08:43:50.68ID:dr2cdwts早めの0クリアがセキュリティーに貢献するであろう事は予想できる。
今そうでなくても、そのうちに使用しなくなったタイミングで可能なら0クリアという形になったとしても驚かない。
0898デフォルトの名無しさん
2017/04/16(日) 08:49:20.74ID:dr2cdwts巨大なツリー構造を作って大量のヒープを使い始めると、参照を移動するだけでも結構なCPU時間を取られるようなので。
0899デフォルトの名無しさん
2017/04/16(日) 09:00:30.49ID:nOhMz2bP一律0クリアって方向にはならないだろうねぇ。
セキュリティ確保のためにわざわざ省略されない0クリアなんて機能を用意するくらいだし。
0900デフォルトの名無しさん
2017/04/16(日) 09:02:08.11ID:H6tmXYoH0901デフォルトの名無しさん
2017/04/16(日) 10:39:40.78ID:yhNZe4vR> 0クリアをどのタイミングでしているかは知らないが
何のためにデバッガがついてると思ってんだ。
0902デフォルトの名無しさん
2017/04/16(日) 11:27:43.64ID:UDjczAnnあー、それそれ
.NET Core の gc フォルダ内のコードに VirtualAlloc の RESET_MEM で
ゼロクリアしてる箇所がいくつかあった
たぶん、コンパクションした後に残ったゴミ領域を VirtualAlloc で
ゼロクリアしてると思うんだが、そこは探しきれなかった
>>895
初期値(0)で初期化されたってのはゼロクリアなんだが……
ttp://ufcpp.net/study/csharp/rm_default.html
お前の言う初期値は別のことを指してるのか?
> どっちにしろGCで大量にゼロクリアが必要にはならないよね。
メモリ確保時のゼロクリアってのはヒープ管理の行うこと
ヒープ管理はGCとは切り離せないの
だから .NET Core のゼロクリアのコードだって gc フォルダ内に配置されてるんだし
0903デフォルトの名無しさん
2017/04/16(日) 11:44:56.24ID:EJt90aDw横からごめん。無知なので教えて。
・GC って概要として不要になったメモリを解放する機能って理解はあってる?
・メモリ確保時に初期化が実行されるとの理解はあってる?
・一般的な挙動として、メモリ確保と GC は別物との理解に誤りはある?
※実装が GC 時に初期化しているかどうかではなく、GC と言う言葉の定義に初期化が含まれるかと言うこと
自分は上記が正しいと思ってるから、 >>895 の内容に違和感を感じなかったんだ。
0904デフォルトの名無しさん
2017/04/16(日) 12:08:09.86ID:uS8rD07o君は正しい
0905デフォルトの名無しさん
2017/04/16(日) 12:11:25.63ID:SqhlDt4oCLRの構造としては、GCはメモリ管理一般を担うコンポーネントである
だからメモリ確保も初期化するのもGC
GCってメモリの使用状況に応じてオブジェクトを動的に再配置したりとか色々裏で頑張ってるから、
単純に 確保/解放 と割り切れるもんじゃないんだよ
0906デフォルトの名無しさん
2017/04/16(日) 12:21:18.23ID:qeC+G70E前者でもいいけどtypeof(シールクラス)にしないとダメだよ
0907デフォルトの名無しさん
2017/04/16(日) 13:21:57.61ID:UDjczAnn>・GC って概要として不要になったメモリを解放する機能って理解はあってる?
はい
>・メモリ確保時に初期化が実行されるとの理解はあってる?
正確ではない
ヒープからオブジェクトを確保したら初期化されていることが決まっているだけで、
初期化のタイミングは決まってない
既に初期化済みの領域から割り当ててるはず
>・一般的な挙動として、メモリ確保と GC は別物との理解に誤りはある?
> ※実装が GC 時に初期化しているかどうかではなく、GC と言う言葉の定義に初期化が含まれるかと言うこと
誤りはない
ただし片方だけではメモリのシステムとして機能しない
>自分は上記が正しいと思ってるから、 >>895 の内容に違和感を感じなかったんだ。
.NET の実装によるので
「GCで大量にゼロクリアが必要にはならない」 は誤り
.NET Core の実装ではページングの機構を使って大量にゼロクリアしてる(と思う)
オレオレCLR実装でGC時ではなく、オブジェクト確保時にゼロクリアする実装というのはあり得る
0908デフォルトの名無しさん
2017/04/16(日) 14:12:52.31ID:0ImhO/qF> GC と言う言葉の定義に初期化が含まれるかと言うこと
含まれていないけど、実質同じ。
GCってプログラマの負担を減らす為の物なのに、
いちいちゼロ初期化必要だとコンセプトとしておかしいでしょ。
まともなGCならゼロクリアされている。CLRもそう。
仕様としては、
△ > ・メモリ確保時に初期化が実行されるとの理解はあってる?
○ ・メモリ確保時には初期化済み
であって、どのタイミングで初期化するかはGCの実装による。
同じ事はOSでも行われていて、以下ページのZeroed参照。
http://nyaruru.hatenablog.com/entry/20080430/p2
レス数が900を超えています。1000を超えると表示できなくなるよ。