[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 09/03 07:28 / Filesize : 292 KB / Number-of Response : 1049
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C#, C♯, C#相談室 Part92



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が建てる事。
建てられない場合は他を指定する事。

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]
無能の馬鹿の議論は飽きたわ
どこか別でやってくれよ
個人のブログとか

956 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 20:55:58.52 ID:dr2cdwts.net]
正直議論に見えない、自演に見えてきた。

957 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 21:04:46.71 ID:wSkKKBMW.net]
>>912
もともとのガベコレの意味はざっくり言えば「確保/解放によって断片化したメモリのデフラグ」
だったはず

知らんけど

958 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 21:22:51.36 ID:0ImhO/qF.net]
>>912
GCは「アイドル時にやれ」というのは分かるよな?
実際はとりあえずこれを目指しているはず。

メモリ確保時にゼロ初期化するのはユーザ時間に直接影響する。
(メモリ確保のレイテンシが著しく増大する)
GC時に初期化するのはGC時間が長くなる。
CLRの場合は確かGC時にはユーザスレッドを凍結していたはずだから、
これもユーザに見えることになる。

だから、普通に考えて、
一旦GCした後、(ユーザスレッドと並行可能な)別スレッドでゼロ初期化だよ。

959 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 23:10:52.0 ]
[ここ壊れてます]

960 名前:0 ID:rt4ZW9V3.net mailto: 基本型の配列は0クリアされるのは仕様で決まっとる
どこのどいつが実際にやろうが関係ないだろ
[]
[ここ壊れてます]



961 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 21:40:45.89 ID:3B2OvgTj.net]
でも初期化するクセは付けた方がいいぞ
プログラマとして
そういう意味でゼロクリアされている事がわかっていても
明示的にやっておくのも間違いじゃない

962 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 21:53:33.58 ID:DRWzf9HM.net]
いいぞ

誰に向かって威張ってるのかね
そんな威張っていうような話か?w






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<292KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef