トップページ > プログラム > 2015年12月20日 > 6vo8OCaj

書き込み順位&時間帯一覧

6 位/185 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000033010007



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
GCは失敗。メモリは自分で管理せよ! その2©2ch.net
C++相談室 part121 [無断転載禁止]©2ch.net

書き込みレス一覧

GCは失敗。メモリは自分で管理せよ! その2©2ch.net
320 :デフォルトの名無しさん[sage]:2015/12/20(日) 17:05:42.48 ID:6vo8OCaj
>>319
>>308を変な例変な例というばかりでGCを用いた正しい解決方法が一向に示されない件について:
繰り返しになるが、>>308のオブジェクトDのケースはどう解決すんのさ…
たとえ変でも反例は反例だし
>>308のリソースCがファイルなのだとしたら、病的な反例というほど例外的想定でもない

読み書き順序の設計の必要性(破壊的代入前提のプログラミング)を口にしつつ
>使い終わったという言葉が示す通り使い終わったならどうなろうが知った事ではない (>306)
と言い切ることはできないとかそういう話

で、現実のハードウェアは破壊的代入前提のブツばかりであるという、(>306)

>>318
ウィンドウシステムでの描画は一般に裏VRAMに描いてハードウェアでBitBlt転送するが
裏VRAMに書く際のデバイスコンテキストが複数使えるが数に限りがある場合…
とか細かい話をしても通じないようならリソースCをファイルと考えてくんな
GCは失敗。メモリは自分で管理せよ! その2©2ch.net
321 :デフォルトの名無しさん[sage]:2015/12/20(日) 17:12:24.84 ID:6vo8OCaj
プチ訂正
誤: で、現実のハードウェアは破壊的代入前提のブツばかりであるという、(>306)
正: で、現実のハードウェアは破壊的代入前提のブツばかりであるという、(>308)
GCは失敗。メモリは自分で管理せよ! その2©2ch.net
324 :デフォルトの名無しさん[sage]:2015/12/20(日) 17:33:49.10 ID:6vo8OCaj
>>322
>読み込みと書き込みを別のリソースに分離したり読み書きが同時に出来るように作る
破壊的代入の世界ではそいつは常に可能とは限らない

>308の例で、リソースCがファイルXなのだとしたら、オブジェクトDが上書きすべきもあくまでファイルXでないといけない。
つまりリソース分離の余地など無い
(正確には、無理矢理ファイルA、BはファイルX、DはファイルYに分ける設計もありえるが、XとYに対する変更をいつどのように統合するかという超難題が生じる

この手の混乱は、A、BがアクセスするリソースCの開放タイミングの決定をGCに任せてサボったがために生じるのである
C++相談室 part121 [無断転載禁止]©2ch.net
303 :デフォルトの名無しさん[sage]:2015/12/20(日) 18:25:45.44 ID:6vo8OCaj
>>297
for (auto num : vec) とかじゃなくてiteratorで回して良ければループ内で先頭と最後を判定できるのでおk、
for (vec_t::const iterator it = vec.begin(); it != vec.end(); ++it) {
 if (it != vec.begin()) { std::cout << ","; }  // ・・・(1)
std::cout << *it;
 it (it == vec.end() - (size_t)1) { std::cout << std::endl; }   // ・・・(2)
}

ただ個人的にはループ内でムダな処理はしたくないので、少なくとも(2)はループ外に出したい(if文は外す
コーディングとテストに時間的余裕があれば(1)もループ外に出したい(その場合vec.size()が0, 1, 2以上のときの場合分けが要るが

"\033[2D\033[0K"の使用はムダなデータが書かれるし、実際表示がうまく逝くかどうかすら環境依存なので認め難い
C++相談室 part121 [無断転載禁止]©2ch.net
304 :デフォルトの名無しさん[sage]:2015/12/20(日) 18:32:12.48 ID:6vo8OCaj
余談になるかもしれんが、もしstd::ostream::operator<<(const T*)が__declspec(noalias)みたいな宣言付きでないなら、
vec.begin()とvec.end()はループ外でローカル変数にコピーして、ループ内ではコピーした方を使ったほうが速く動く可能性が高い
(さもないと、std::cout.operator<<()の呼び出しでvec.begin()とvec.end()が変更される前提のコードが吐かれる
C++相談室 part121 [無断転載禁止]©2ch.net
306 :デフォルトの名無しさん[sage]:2015/12/20(日) 18:43:28.87 ID:6vo8OCaj
>>305
スッゲ良くできてるwwwwwwwwwwwww
C++相談室 part121 [無断転載禁止]©2ch.net
309 :デフォルトの名無しさん[sage]:2015/12/20(日) 20:08:22.46 ID:6vo8OCaj
>>308
計ってみたらたしかにそうっぽいorz
VS2010でメモリ上のcharバッファに0..99をお題形式の文字列として100000回書き込むやつで10回計って平均をとったらこうなったわ;
Firstフラグ方式: 平均   3.249秒
>>307そのまま: 平均   9.044秒
vec.end()をループ外に出した: 平均   5.762秒

検証コード:
ttp://ideone.com/O1nUEN
(※ codepad.orgの方が何か死んでるので、仕方なくVS2010のコードのままideone.comの方に貼った。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。