[過去ログ]
C++相談室 part164 (1002レス)
C++相談室 part164 http://mevius.5ch.net/test/read.cgi/tech/1683600652/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
222: デフォルトの名無しさん (スフッ Sd33-pDI4) [] 2023/06/16(金) 15:49:19.69 ID:YNpYq5+wd >>182 良く読むと >STL コンテナ以外にも、大きいメモリが割り当てられてるオブジェクトを使用後に破棄したいというケースがよくあります。 >最も簡単なやり方は関数とか局所的なスコープとして切り出すことかと思いますが いやいやそもそも「関数とか局所的なスコープ(つまりautoだろ?stackだろ?)で大きいメモリ確保しようなんて思うな」って話なんだよな http://mevius.5ch.net/test/read.cgi/tech/1683600652/222
223: デフォルトの名無しさん (ワッチョイ e95f-2rqm) [sage] 2023/06/16(金) 16:09:01.10 ID:qgM8i0iT0 ローカルなvectorを置けばヒープ確保されるので「つまりautoだろ?stackだろ?」は また何か誤解してる人が来たなとしか。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/223
224: デフォルトの名無しさん (ワッチョイ 219b-q0yD) [sage] 2023/06/16(金) 16:49:22.15 ID:ybGonaVE0 reset要らないとか言ってる奴らは結局何なん http://mevius.5ch.net/test/read.cgi/tech/1683600652/224
225: デフォルトの名無しさん (テテンテンテン MMeb-jufV) [sage] 2023/06/16(金) 19:32:47.80 ID:yx9ngvFiM >>224 結論は>211にまとめといた。 resetは要らん。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/225
226: デフォルトの名無しさん (ワッチョイ 92dc-gfWY) [sage] 2023/06/17(土) 08:56:51.34 ID:3MnK6eEg0 >>223 「STLコンテナ以外にも」という文言が読めてない文盲さんたちがvectorの話ばっかしててωωω http://mevius.5ch.net/test/read.cgi/tech/1683600652/226
227: デフォルトの名無しさん (テテンテンテン MM96-Axrn) [sage] 2023/06/17(土) 10:36:04.78 ID:koF9X0k9M >>226 「大きいメモリが割り当てられてるオブジェクトを使用後に破棄したい」なら >185か>187。 >187はunique ptrの置き場所と解放タイミングによって解放の仕方が違って、自動変数にして関数やスコープから抜けるタイミングで解放するなら手動操作不要、vectorなどのヒープに置くとかスコープの終わり前に解放したいとかならreset()とかvectorの要素削除とかで手動解放。 いずれにしても、自動変数に巨大インスタンスを考え無しに置くのは悪手で、そのオブジェクトがスタックに巨大データを置かない(ヒープ等に置く)ことを確認してからにしたほうがいい。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/227
228: デフォルトの名無しさん (ワッチョイ 6128-l8k0) [sage] 2023/06/17(土) 15:30:36.02 ID:S+64vkUJ0 >>216 vectorのcapacityはそのvectorが氏ぬかcapacity縮小アクションが生じない限りvector固有に占有されるから capacity(のうちsize()を超える分)と OS側からみた空きメモリはまた別でケテーイ…… 一方malloc()がOSからゲットしたメモリをOSに返さずにいるのはOS側からみた空きメモリではないにしろ 同一プロセス内の他のオブジェクトの構築に使えるのだから空きメモリのうち これすらもOSに返したいということならこの流れの中で現状答えがでていないキモヌ http://mevius.5ch.net/test/read.cgi/tech/1683600652/228
229: デフォルトの名無しさん (ワッチョイ 6128-l8k0) [sage] 2023/06/17(土) 15:31:34.82 ID:S+64vkUJ0 まあしいて言えばプロセスを一旦exitして再立ち上げ? http://mevius.5ch.net/test/read.cgi/tech/1683600652/229
230: デフォルトの名無しさん (ワッチョイ 6128-l8k0) [sage] 2023/06/17(土) 15:45:09.56 ID:S+64vkUJ0 普通に作ったら(コードで明示的に直接OSのAPIでメモリを分捕って解放とかしない限りは プロセスのprivate bytesはプロセスが氏ぬまで増えることはあっても減ることは無いという印象、 http://mevius.5ch.net/test/read.cgi/tech/1683600652/230
231: デフォルトの名無しさん (ワッチョイ 7d9b-trtU) [sage] 2023/06/17(土) 16:27:35.20 ID:5e+acAEX0 >>225 スマンまじで理解できないのだけど、なぜvectorに限った話をしてるの? http://mevius.5ch.net/test/read.cgi/tech/1683600652/231
232: デフォルトの名無しさん (テテンテンテン MM96-Axrn) [sage] 2023/06/17(土) 19:22:00.09 ID:mYwWSuEFM >>231 巨大インスタンスは>227 http://mevius.5ch.net/test/read.cgi/tech/1683600652/232
233: デフォルトの名無しさん (ワッチョイ d9ab-trtU) [sage] 2023/06/17(土) 19:29:36.10 ID:HtrmHz3i0 回答者のレベル低いな~~~ こんだけダラダラ続けて、結局質問者>>182が>>190で早々に結論づけてることをリピートしてるだけw http://mevius.5ch.net/test/read.cgi/tech/1683600652/233
234: デフォルトの名無しさん (ワッチョイ 69f0-J7ro) [sage] 2023/06/17(土) 19:54:50.95 ID:9hSxsWrs0 アロケータ気に入らないなら自作くらいしろよポンコツ なにもかもSTLに頼りやがってそれでPGやってるつもりになるなよ http://mevius.5ch.net/test/read.cgi/tech/1683600652/234
235: デフォルトの名無しさん (ワッチョイ 6128-l8k0) [sage] 2023/06/17(土) 20:19:47.36 ID:S+64vkUJ0 人類には早すぎた話題また…… http://mevius.5ch.net/test/read.cgi/tech/1683600652/235
236: デフォルトの名無しさん (オイコラミネオ MM91-L1I+) [sage] 2023/06/17(土) 23:14:07.63 ID:H9lc23A5M 次世代の人は便利に使いこなしてるかより簡素になった仕組みを使うのだろう http://mevius.5ch.net/test/read.cgi/tech/1683600652/236
237: デフォルトの名無しさん (ワッチョイ 655f-rdTE) [sage] 2023/06/18(日) 03:00:55.26 ID:GIMFAM+a0 >>231 コンテナの種類を問わない一般的な方法なんてものはないからじゃないですかね http://mevius.5ch.net/test/read.cgi/tech/1683600652/237
238: デフォルトの名無しさん (ワッチョイ 8101-1tDD) [sage] 2023/06/18(日) 21:04:45.70 ID:VwYqKwPk0 以下のコードで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) { const auto size {lhs.size ()}; if (size != rhs.size ()) throw std::runtime_error ("Sizes are different."); for (size_t i {0}; i < size; ++ i) lhs [i] += rhs [i]; return lhs; } Vector operator + (const Vector &lhs, const Vector &rhs) { Vector result {lhs}; result += rhs; return result; } int main () { Vector v0 {0, 1, 2}, v1 {10, 11, 12}; Vector_Container c0 {v0, v1}; accumulate (c0.begin (), c0.end (), Vector {}); // コンパイルエラー return 0; } http://mevius.5ch.net/test/read.cgi/tech/1683600652/238
239: デフォルトの名無しさん (ワッチョイ 515f-C6j3) [sage] 2023/06/18(日) 21:45:44.90 ID:UCXMUPHB0 >>238 エラーメッセージ見ればたぶん分かる。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/239
240: デフォルトの名無しさん (ワッチョイ 8101-1tDD) [sage] 2023/06/18(日) 21:48:16.43 ID:VwYqKwPk0 >>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 /usr/include/c++/12/bits/stl_numeric.h:141:46: error: no match for ‘operator+’ (operand types are ‘std::remove_reference<std::array<double, 3>&>::type’ {aka ‘std::array<double, 3>’} and ‘std::array<double, 3>’) 141 | __init = _GLIBCXX_MOVE_IF_20(__init) + *__first; http://mevius.5ch.net/test/read.cgi/tech/1683600652/240
241: デフォルトの名無しさん (ワッチョイ 9e81-L1I+) [sage] 2023/06/18(日) 23:15:51.41 ID:w3/xAOT+0 ADLでoperator+が見つからないからかな? struct Vector : std::array <double, 3> {}; みたいに定義したらいけるのでは http://mevius.5ch.net/test/read.cgi/tech/1683600652/241
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 761 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.012s