- 【Delphi】Embarcaderoオッチャ その30【C++ビルダ】
745 :デフォルトの名無しさん[sage]:2015/08/31(月) 11:02:44.01 ID:4UR705Ml - DelphiのプログラムはWin32APIを呼び出しているし、
Win32APIのコード量は、超超莫大なんだが MSが信用できないのなら、Windowsを使わない他、選択肢はない しかし、Windowsを選ぶ顧客は多いし、こっちの責任ではない
|
- C++相談室 part118 [転載禁止]©2ch.net
986 :デフォルトの名無しさん[sage]:2015/08/31(月) 11:12:53.08 ID:4UR705Ml - >>954 のコードは、リソースに整数値を割り当てています
>static std::map<int, RESOURCE_IMAGE*> m_resources; 整数値なのにmapにする意味は何ですか? vectorではダメなんですか? 割り当てる整数値が、無茶苦茶大きくなる事があって、メモリ効率が悪いってことですか? でも、はじめから、そんな大きな整数値を、割り当てないようにすれば良いだけでは? それとも、ポインタを整数値にキャストしたものを、値として使っているってことですか? それなら始めからポインタを使えばよいのでは?
|
- ゲームプログラムなら俺に聞け31 [転載禁止]©2ch.net
980 :デフォルトの名無しさん[sage]:2015/08/31(月) 11:35:14.93 ID:4UR705Ml - つまり、スマホゲーは、良い大人がするものではない、ということだな
普通の人なら、120円で、缶コーヒーを買う
|
- C++相談室 part118 [転載禁止]©2ch.net
988 :デフォルトの名無しさん[sage]:2015/08/31(月) 11:40:13.09 ID:4UR705Ml - 開放される順が固定じゃないのは普通ですが、
それでなんでmapにする必要があるんですか?
|
- C++相談室 part118 [転載禁止]©2ch.net
992 :デフォルトの名無しさん[sage]:2015/08/31(月) 12:06:22.68 ID:4UR705Ml - >歯抜けを解消するには確保する前に空場所を探す手間を入れる必要が出てくる
べつに、したらいいじゃないですか 手間が、実行時間の意味でしたら、フリーリストを用意すればよいですし、 そこのコストがあったとしても、配列の方が数値→ポインタの変換が速いのは明白ですし 手間が、コーディングの意味でしたら、そもそも、整数値に置き換えずポインタでいいですし
|
- C++相談室 part118 [転載禁止]©2ch.net
995 :デフォルトの名無しさん[sage]:2015/08/31(月) 13:03:45.70 ID:4UR705Ml - 特に、
>2. 整数IDを自分が好きに設定できるとは限らない これが意味わからないですね 他人がIDを設定して、自分でIDを好きに設定できない状況なら、 他人がID→ポインタの変換を実装すべきで、 自分でID→ポインタのマップを持つ意味は? 通常、ID→ポインタの変換テーブルを持っている人が、 IDを割り振るのでは?
|
- C++相談室 part118 [転載禁止]©2ch.net
996 :デフォルトの名無しさん[sage]:2015/08/31(月) 13:04:55.71 ID:4UR705Ml - >1. ポインタの取得なので速度に拘る意味が全くない
これも良く分からないですね
|
- C++相談室 part119 [転載禁止]©2ch.net
10 :デフォルトの名無しさん[sage]:2015/08/31(月) 22:06:38.27 ID:4UR705Ml - >>4
どうしてそう思います?
|
- C++相談室 part119 [転載禁止]©2ch.net
14 :デフォルトの名無しさん[sage]:2015/08/31(月) 22:34:56.89 ID:4UR705Ml - >>12
どうしてですか? std::mapの1エントリが、一体どれだけのメモリ量なのか、計算してください まず、保持すべき整数値IDとポインタで8バイト、 木なので最低でもrightとleftが有るので+8バイト 加えてエントリはnewで確保されるので、頭に管理領域が付く 一方、std::vectorなどで配列で管理する場合、 1エントリに付きポインタ1つの容量なので、4バイト つまり、配列をかなり無駄遣いしたとしても、配列の方がメモリ量は少ない
|
- C++相談室 part119 [転載禁止]©2ch.net
17 :デフォルトの名無しさん[sage]:2015/08/31(月) 22:48:52.48 ID:4UR705Ml - >>16
配列の、その無駄よりも、mapの方が、メモリが無駄になるって>>14で計算して見せただろ あと、フリーリストって言う名前で書いたけど、これももちろん配列だから IDやハンドルをポインタに変換するのに、配列を使う方法は、 もっとも効率的な方法なのに、これを富豪的と言われてしまってはね 他に効率的な方法が無いのにどうしろと もちろん、ポインタの値を生で使えば、もっとも効率的ではある 変換して無いので、今回のテーマにはそぐわないが
|
- C++相談室 part119 [転載禁止]©2ch.net
21 :デフォルトの名無しさん[sage]:2015/08/31(月) 23:12:33.08 ID:4UR705Ml - >>18
何か知らんが、フリーリスト用の配列に、開放されたリソースのIDをpushしておけばよいだけ 新規リソースにIDを割り当てる時は、フリーリストから1つ取ってきて、割り当てればよい 面倒ならフリーリストはなくても良いだろうな この場合、IDを割り当てるたびに、先頭から空いているIDを探さなければならないが、 配列は連続したメモリ領域なので、この処理はキャッシュに乗りやすい類の処理だ 一方で、mapへの追加は、想像よりも遅いだろう 挿入箇所を探すのに、値を比較をしながら、ポインタをたどらなければならない(キャッシュに乗りにくい) 大体は赤黒木なので、バランスをとる作業も入る 毎回newが発生する ちなみに赤黒木はこんな感じのアルゴリズム http://www.moon.sannet.ne.jp/okahisa/rb-tree/
|
- C++相談室 part119 [転載禁止]©2ch.net
22 :デフォルトの名無しさん[sage]:2015/08/31(月) 23:14:33.96 ID:4UR705Ml - >>19
>配列で実装はできるが、最悪管理する配列と同数の上限付きスタックになる そういったワーストケースでも、std::mapよりもメモリ効率が良い事は>>14で計算したが
|
- C++相談室 part119 [転載禁止]©2ch.net
26 :デフォルトの名無しさん[sage]:2015/08/31(月) 23:32:54.34 ID:4UR705Ml - >そしてフリーリストのワーストケースはメモリに関しては4nだろ
std::mapがどれだけメモリを無駄遣いするかは、>>14で計算している 1エントリについて、最低でも20バイトは必要なので、 その言い方だと、最低でも20nになる newの管理領域次第で、もっと悪くなる >あのな、そもそも想定のリソースはポインタだぞ? >構造体ならわかるが、ポインタに速度なんて必要ないんだよ もう、なにいってるか意味不明でしょう? これが底辺C++erなのか
|
- C++相談室 part119 [転載禁止]©2ch.net
29 :デフォルトの名無しさん[sage]:2015/08/31(月) 23:47:08.58 ID:4UR705Ml - 単位を書かないお前が悪いんだろ
フリーリストの最大サイズは、すべての要素が開放された時で、 n個の要素になる 1つの要素はintで4バイトだから、4nと推測したのだが フリーリスト付きの配列で、n個格納するのに、 最大で4nの要素が必要と言う意味かね これでもstd::mapの方がメモリ効率が悪いことには変わりないが
|