[過去ログ] C++相談室 part164 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
222: (スフッ Sd33-pDI4) 2023/06/16(金)15:49 ID:YNpYq5+wd(1) AAS
>>182 良く読むと
>STL コンテナ以外にも、大きいメモリが割り当てられてるオブジェクトを使用後に破棄したいというケースがよくあります。
>最も簡単なやり方は関数とか局所的なスコープとして切り出すことかと思いますが
いやいやそもそも「関数とか局所的なスコープ(つまりautoだろ?stackだろ?)で大きいメモリ確保しようなんて思うな」って話なんだよな
223(2): (ワッチョイ e95f-2rqm) 2023/06/16(金)16:09 ID:qgM8i0iT0(1) AAS
ローカルなvectorを置けばヒープ確保されるので「つまりautoだろ?stackだろ?」は
また何か誤解してる人が来たなとしか。
224(1): (ワッチョイ 219b-q0yD) 2023/06/16(金)16:49 ID:ybGonaVE0(1) AAS
reset要らないとか言ってる奴らは結局何なん
225(1): (テテンテンテン MMeb-jufV) 2023/06/16(金)19:32 ID:yx9ngvFiM(1) AAS
>>224
結論は>211にまとめといた。
resetは要らん。
226(1): (ワッチョイ 92dc-gfWY) 2023/06/17(土)08:56 ID:3MnK6eEg0(1) AAS
>>223
「STLコンテナ以外にも」という文言が読めてない文盲さんたちがvectorの話ばっかしててωωω
227(1): (テテンテンテン MM96-Axrn) 2023/06/17(土)10:36 ID:koF9X0k9M(1) AAS
>>226
「大きいメモリが割り当てられてるオブジェクトを使用後に破棄したい」なら
>185か>187。
>187はunique ptrの置き場所と解放タイミングによって解放の仕方が違って、自動変数にして関数やスコープから抜けるタイミングで解放するなら手動操作不要、vectorなどのヒープに置くとかスコープの終わり前に解放したいとかならreset()とかvectorの要素削除とかで手動解放。
いずれにしても、自動変数に巨大インスタンスを考え無しに置くのは悪手で、そのオブジェクトがスタックに巨大データを置かない(ヒープ等に置く)ことを確認してからにしたほうがいい。
228: (ワッチョイ 6128-l8k0) 2023/06/17(土)15:30 ID:S+64vkUJ0(1/4) AAS
>>216
vectorのcapacityはそのvectorが氏ぬかcapacity縮小アクションが生じない限りvector固有に占有されるから
capacity(のうちsize()を超える分)と OS側からみた空きメモリはまた別でケテーイ……
一方malloc()がOSからゲットしたメモリをOSに返さずにいるのはOS側からみた空きメモリではないにしろ
同一プロセス内の他のオブジェクトの構築に使えるのだから空きメモリのうち
これすらもOSに返したいということならこの流れの中で現状答えがでていないキモヌ
229: (ワッチョイ 6128-l8k0) 2023/06/17(土)15:31 ID:S+64vkUJ0(2/4) AAS
まあしいて言えばプロセスを一旦exitして再立ち上げ?
230: (ワッチョイ 6128-l8k0) 2023/06/17(土)15:45 ID:S+64vkUJ0(3/4) AAS
普通に作ったら(コードで明示的に直接OSのAPIでメモリを分捕って解放とかしない限りは
プロセスのprivate bytesはプロセスが氏ぬまで増えることはあっても減ることは無いという印象、
231(2): (ワッチョイ 7d9b-trtU) 2023/06/17(土)16:27 ID:5e+acAEX0(1) AAS
>>225
スマンまじで理解できないのだけど、なぜvectorに限った話をしてるの?
232: (テテンテンテン MM96-Axrn) 2023/06/17(土)19:22 ID:mYwWSuEFM(1) AAS
>>231
巨大インスタンスは>227
233: (ワッチョイ d9ab-trtU) 2023/06/17(土)19:29 ID:HtrmHz3i0(1) AAS
回答者のレベル低いな~~~
こんだけダラダラ続けて、結局質問者>>182が>>190で早々に結論づけてることをリピートしてるだけw
234: (ワッチョイ 69f0-J7ro) 2023/06/17(土)19:54 ID:9hSxsWrs0(1) AAS
アロケータ気に入らないなら自作くらいしろよポンコツ
なにもかもSTLに頼りやがってそれでPGやってるつもりになるなよ
235: (ワッチョイ 6128-l8k0) 2023/06/17(土)20:19 ID:S+64vkUJ0(4/4) AAS
人類には早すぎた話題また……
236: (オイコラミネオ MM91-L1I+) 2023/06/17(土)23:14 ID:H9lc23A5M(1) AAS
次世代の人は便利に使いこなしてるかより簡素になった仕組みを使うのだろう
237(1): (ワッチョイ 655f-rdTE) 2023/06/18(日)03:00 ID:GIMFAM+a0(1) AAS
>>231
コンテナの種類を問わない一般的な方法なんてものはないからじゃないですかね
238(1): (ワッチョイ 8101-1tDD) 2023/06/18(日)21:04 ID:VwYqKwPk0(1/4) AAS
以下のコードでaccumulateのとこでコンパイルエラーが起こります
何故か分かります?
#include <iostream>
#include <array>
#include <deque>
#include <exception>
#include <numeric>
using Vector = std::array <double, 3>;
using Vector_Container = std::deque <Vector>;
Vector &operator += (Vector &lhs, const Vector &rhs) {
省16
239(1): (ワッチョイ 515f-C6j3) 2023/06/18(日)21:45 ID:UCXMUPHB0(1) AAS
>>238 エラーメッセージ見ればたぶん分かる。
240: (ワッチョイ 8101-1tDD) 2023/06/18(日)21:48 ID:VwYqKwPk0(2/4) AAS
>>239
レス有難うございます
まず訂正
-accumulate
+std::accumulate
全部は貼れないですけど大事そうなところ
In file included from /usr/include/c++/12/numeric:62,
from test1.cpp:18:
/usr/include/c++/12/bits/stl_numeric.h: In instantiation of ‘constexpr _Tp std::accumulate(_InputIterator, _InputIterator, _Tp) [with _InputIterator = _Deque_iterator<array<double, 3 array<double, 3>&, array<double, 3>*>; _Tp = array<double, 3>]’:
test1.cpp:22:14: required from here
省2
241(1): (ワッチョイ 9e81-L1I+) 2023/06/18(日)23:15 ID:w3/xAOT+0(1) AAS
ADLでoperator+が見つからないからかな?
struct Vector : std::array <double, 3> {};
みたいに定義したらいけるのでは
上下前次1-新書関写板覧索設栞歴
あと 761 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.017s