C++相談室 part148
レス数が1000を超えています。これ以上書き込みはできません。
>>924
まあそりゃね
使えるようにしてもPCやスマホのように自由には使えないぞ
こまめに確保解放なんてことはしない
基本最初に確保して終わり
解放はしない
だから確保しか出来ないヒープも選べる >>927
それはPCやスマホなどリッチな環境の場合
>>931
一見軽そうで重い関数があったりするから
同じ人が同じ時に作ってたらそんな処理にはしないだろうけど 白物家電のマイコンやら、pfcのマイコンやらもやったが、そんなのはそもそもmalloc使うような環境じゃなかったしなぁ
RAMもkB単位で少ないし、自由に関数呼べるほどスタックも無いし
割り込み部分はアセンブリで書いてた 今は冷蔵庫や電子レンジもAI積んでネットワークに繋がるIoT時代だけど
それでも組み込みって未だにそんな感じなの? まあそれは特に東南アジア向けだったし
日本よりさらにチープだったのかも いまだにチープな8bit CPUもたくさん使われている cortex-m0とか載ってたらもう小躍りしちゃうくらいのリッチさだよね リッチなCPUを使うって事は
それだけ求められる事が大きいわけで でもCPU節約するために人件費かけて結局商品高いじゃん 趣味じゃないんだから
当然トータルで考えるよ
開発工数、単価、機能性能、信頼性、供給、大人の事情、... ゲーム業界の人だけど
new使っても問題ないってのはおれの常識とは異なる
まず問題が広すぎる
言いたいことはデフォルトのグローバルヒープを無邪気に使っていいか
ということだと仮定すると
AAAクラスでそんな杜撰なことしてるところはないと思う
組み込みもそうだがリアルタイム性が必要とされるところでは、メモリ予算というものがある
グラフィック、オーディオ、ネットワークなどのモジュールごとにメモリいくらと決められる
モジュールの責任者はその中でやりくりする
ここで大事なのはメモリの最大使用量を保証しなければならないってこと
必要ならローカルのヒープは作ったりするが、この時点で担当者が気ままにnewってのは認められない
基本的にすべてコントロールされる
現実的に最大量が正確に見積もれないものもあるがそれでも最大量は決める といってもグローバルヒープを使わないわけじゃない
オープンソースのもので無邪気にmallocするものは多数あるが、それほど荒ぶらなければそのまま使う
(リアルタイム性が不要なら仮想メモリに任せる)
あとmalloc遅くないという論調の人がいるけどそれはベストケースの話でしょう
ヒープメモリが不足したり一度に巨大なメモリを確保する場合はシステムコールになるからずっと遅くなる
ワーストが見積もれないものはリアルタイムで使いづらい
まぁ昨今は仮想マシン上で動くゲームが多数あるわけで気にしなくていいレベルという意見はある
ただesports系で一瞬カつくとか商品性に関わるわけで
また後から直すのも地獄なので
最初から計画的に作るべきだろう ここC++スレだよね、つかぬことだけど
記憶管理はいつでも如何様にもカスタマイズできるようにtypename Allocatorになってるわけじゃん
なんでいきなり組み込みには向かないとかキリッてんの? >>968
typename Allocatorとかすげぇ初心者っぽい
キリってるのはお前だ >>968
標準ライブラリでもallocatorが指定できないものもあるんだよ
もはや今のc++で標準ライブラリを全面的に使いつつ、ヒープを個別に差し替えるのはかなり非現実的だ
allocatorを差し替えられてもnewするタイミングや量はリバースエンジニアリングしないとわからない
それが問題になることもある てか、静的確保したメモリブロック使うアロケータ書いてそれで標準コンテナ使うのが基本じゃね
まあeastlでも良いが >>971
> 標準ライブラリでもallocatorが指定できないもの
例えば?
newだってoperator newですぐカスタマイズできるし
placementで環境依存の細かい設定もできる
ライブラリはISO/IEC14882に固執する必要はなく
サードパーティでも内製でもより都合のよいほうを使えばいい
というだけの話 カスタマイズの話なら真っ先にnewの話をすべきなんだが順番おかしくね?
ていうか今時はallocatorより先にpolymorphic resourceだと思うが
というかそもそもmallocの速度の話からであって、いきなりallocatorの話したり
C++全体を否定されたかのように過剰反応するとか・・ 仕様通りに書けばいい感じにうごいてくれて、責任は俺にはないとか
思い込んでんじゃってるキッズなんだろう。
デバッグするなんてことはもちろん頭にない。 >>890からの流れでは直後からnewが出てきてたろ
C++が組み込みに向かないという主張の
理由がmallocじゃおかしいだろ
それしか使えんわけでもなし >>968に突っ込むと>>890に同意したことになるのか >>973
> > 標準ライブラリでもallocatorが指定できないもの
> 例えば?
でしょ?
お前さんは人並み以上にc++知ってると思うけどこの事実知らない
どこで使われてるか知らなきゃ置き換えができないよね
答えはあえて教えない
標準ライブラリのヘッダーをnewでgrepすればallocatorを通さないものが見つかるさ
自分で確認してこりゃ置き換え無理だわと悟って欲しいw
もし見つからないなら後で書くよ
ちなみにグローバルにnewを置き換えるぐらいならmallocのバイナリを差し替えた方が早いし確実 >>979
横からだが、具体的に誰のどこを指してそう思ったのかよろしく >>966
もちろん、むやみやたらと使って全く問題ないわけではない。
が、本当に必要な箇所で使う程度なら(多くの場合)余り問題ないという程度。
大体ゲームの場合のnewやmallocは、敵や弾やイフェクト、3Dオブジェクトなど
を1つずつ収めるために使うことが多いが、ゲームの1シーン内に登場する個数が
newやmallocが問題ない程度に元々なっている事がわりと多いと言うだけ。
3Dの雑草の葉っぱ一枚単位で new したりすると問題になってくるかもしれない。 >>981
なんとも感覚的な話だね
だいたい動けばOK!って感じ?
おれは仕事でそういうもの作りはしない コンシューマかPCかでも違うだろうし
(自分はさほど詳しくないが、基本コンシューマは標準ヒープ使わないはず)
ジャンルによっても違うんじゃね
PCのMMORPGなんかだとシーン中のメモリ確保は必須だろうし
あと草は普通同じメッシュやテクスチャ使うだろうし、揺れを入れるにしても一つ一つにデータ持たせるなんてアホなことしないだろ >>978
「後で」かw
もう1000間近だし期限切らないでおけば時効だろってか? >>985
sgjaAMaLが、自分の話に傾聴してきた人の質問に答えなかった
つまり自分の考えを伝える努力を中止したということでしかない
何人も自らの意見を他人に伝えるには
その意見を説明するしかなく
説明をやめることは沈黙に等しい 黙って調べてくれば?
調べて無いと結論づけられればまた偉そうに出来るだろw ちゃうねん。
僕が組み込みいうたのはArduinoのことな。
RAM2KBやし。 >>984
条件は明示してるんだからおれが書くかはお前に委ねられている
1000が迫っているぞw この手の人最後まで答えないか
答えても的外れなのしか見たことないわ arrayのどこに動的メモリ確保が出てくるんだよ
アホか 漏れはnewのときたまの遅さの可能性に警鐘を鳴らしたからセフセフ、 やっぱnew/deleteのレイテンシーを設計に乗せるには非ページプールメモリにアロケートするべきですよねー なんかスレ止めてたら悪いから書いておくよ
ひとつは17からallocatorがdeprecatedになったstd::functionね
これは結構知られてるばずだ
定期的にこれ濫用する人が現れるんだけど中身理解してから使うか判断しろと職場では言っている代物
もうひとつあげるなら、
処理系によってかなり違うかもだけどstd::threadも中でこっそり内部クラスをnewしてるはず
ただスレッド間で引数を引き渡すためのものでサイズは小さいしスレッド作るコストの方が遥かにでかいから問題にはなりにくい
他にもあるけどとりあえずこんなもんで std::functionを使わないと1 bitもプログラムが書けなくなった漏れガイル、
クロージャをいちいちクラス定義から手で書く日々に戻るのはいやじゃー このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 17日 3時間 0分 7秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。