[過去ログ] C++相談室 part164 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
182(8): デフォルトの名無しさん (ワッチョイ b16b-q0yD) [sage] 2023/06/14(水) 08:43:22.06 ID:/jeWb7sY0(2/2) AAS
あとメモリに関連した質問で、例えばめちゃデカい std::vector を要素数 1 に resize しても capacity はめちゃデカいままですよね?
STL コンテナ以外にも、大きいメモリが割り当てられてるオブジェクトを使用後に破棄したいというケースがよくあります。
最も簡単なやり方は関数とか局所的なスコープとして切り出すことかと思いますが、他に、オブジェクトに割り当てられているメモリを手動で解放する方法があったら教えてください。
184(2): はちみつ餃子◆8X2XSCHEME (ワッチョイ c13e-2rqm) [sage] 2023/06/14(水) 09:19:31.16 ID:O3itrano0(1) AAS
>>182
そのために shrink_to_fit がある。
詳細は実装依存なので何もしない関数であっても仕様に反しないけど
常識的には各実行環境で効率的に動くように実装されるので
まずは試してみても損はないと思う。
アロケータを自作してもあまり制御できないんよね。
アロケーションが必要になったらコンテナからアロケータが呼ばれるという
受動的な構造なのでコンテナによるメモリ管理戦略にそれほど関与できるわけではない。
本当にどうしても標準ライブラリの挙動の詳細が不満なら
自分で同等のものを実装する (または望ましいものをどこかから見つける) しかないよ。
185(4): デフォルトの名無しさん (アウアウウー Sadd-g1CP) [sage] 2023/06/14(水) 10:15:22.04 ID:iWYHYN4ra(1/3) AAS
>>182
new で造って delete (または delete []) で解放
187(2): デフォルトの名無しさん (テテンテンテン MMeb-jufV) [sage] 2023/06/14(水) 12:29:45.65 ID:XEzvAdInM(1) AAS
>>182
>>185とほとんど同じだけどunique ptrで管理。
ヒープの確保時間が問題になるならアロケーター使ってヒープを予約する。
188(1): デフォルトの名無しさん (ワッチョイ d9f0-EP1b) [sage] 2023/06/14(水) 13:12:37.90 ID:9CAXVpD30(1) AAS
>>182
vector<空にしたいオブジェの要素の型>().swap(空にしたいオブジェ)
198(1): デフォルトの名無しさん (テテンテンテン MMeb-jufV) [sage] 2023/06/14(水) 19:18:20.42 ID:YeSwNDrrM(1) AAS
>>196
どのコンテナを使うかによる。
vectorとかdequeはまだ確保していない要素用の領域をしばしば予約するから、>>182のような状況を回避するのは面倒臭い。
listとかmapは(これも実装次第だけど)まだ確保していない要素のための領域を予約したりしないから、他のデメリットを許容するなら>>182対策の選択肢になる可能性はある。
いずれにしても、そこまで気にするならまずベンチマークを取って実態を調査すべきだし、そもそも巨大なメモリを頻繁に確保・解放するのは設計に問題があることが多いから、メモリを解放しないで済む方法を検討してみる。
205(1): デフォルトの名無しさん (ワッチョイ 219b-q0yD) [sage] 2023/06/15(木) 12:02:49.40 ID:J1cG0ikp0(2/3) AAS
>>201
いや、ポインタのサイズなんて全く気にしてない。
質問は、メモリの解放をコンテナに任せるならわざわざスマポで持つ意味ないよね? ってこと。
で、コンテナに任せるというのは元の質問(>>182)への回答に全くなってないよね? ってこと。
(その理由は>>184,200様の書いてくださってる通り)
つーかお前が何も分かってないのは>>195でreset()しなくて良いとかほざいてる時点でお察し。
>>203-204
笑
>>203は>>191で「reset()しなくても良い」とかほざいてて>>195と同レベ。
>>183-185,194,197,200様
ご丁寧な回答をくださりどうもありがとうございました。
勉強になります。
222: デフォルトの名無しさん (スフッ Sd33-pDI4) [] 2023/06/16(金) 15:49:19.69 ID:YNpYq5+wd(1) AAS
>>182 良く読むと
>STL コンテナ以外にも、大きいメモリが割り当てられてるオブジェクトを使用後に破棄したいというケースがよくあります。
>最も簡単なやり方は関数とか局所的なスコープとして切り出すことかと思いますが
いやいやそもそも「関数とか局所的なスコープ(つまりautoだろ?stackだろ?)で大きいメモリ確保しようなんて思うな」って話なんだよな
233: デフォルトの名無しさん (ワッチョイ d9ab-trtU) [sage] 2023/06/17(土) 19:29:36.10 ID:HtrmHz3i0(1) AAS
回答者のレベル低いな~~~
こんだけダラダラ続けて、結局質問者>>182が>>190で早々に結論づけてることをリピートしてるだけw
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.033s