20/02/14 17:22:07.67 nLeEzkye.net
>>846
この場合はその行の終わり。
セミコロンのところだと思っていい。
873:はちみつ餃子
20/02/14 17:34:07.49 nLeEzkye.net
すごくどうでもいい話なんだけど、
JIS では完結式という用語を使ってるのに完全式って言葉の方がよく使われているよね……。
874:はちみつ餃子 ◆8X2XSCHEME
20/02/14 17:59:01 nLeEzkye.net
>>846-847
式の一部であるような式が部分式で、
そうでないような式が完結式って言う。
875:デフォルトの名無しさん
20/02/14 19:29:16.13 CPLKNT1n.net
>>837-838
ありがとん。
876:846
20/02/14 19:44:55.13 jFoBh/u0.net
>>847-849
ご回答ありがとうございます。
大変勉強になりました。
877:デフォルトの名無しさん
20/02/14 20:52:54 x/oqiD9H.net
おいCぺろぺろ
878:デフォルトの名無しさん
20/02/14 20:58:59 V/oEZCXU.net
>>851
いえいえ
879:デフォルトの名無しさん
20/02/15 10:34:21 BMoFghq4.net
newって意外と速いんだな。
アクセスは不利かもしれないけど。
880:デフォルトの名無しさん
20/02/15 12:11:39.70 DzNKB5Jj.net
>>854
速いよ。
高速なゲームでも普通に使える。
881:デフォルトの名無しさん
20/02/15 12:12:59.04 BMoFghq4.net
でもスタックは常にキャッシュに乗ってるから、そこらへんでどう変わるのかな。
882:デフォルトの名無しさん
20/02/15 13:19:54 J1bovO5o.net
キャッシュに乗るくらいの量だったらそもそもクリティカルな重さにはならんだろ。
newで問題になるのは10万とかそのくらいのオーダーをがっつりfor文で呼ぶとかそれくらいのことする場合。
883:デフォルトの名無しさん
20/02/15 13:21:27 BMoFghq4.net
スタックは常にキャッシュに乗ってる。
884:デフォルトの名無しさん
20/02/15 13:23:13 lTU5fwx1.net
>>857
風邪が騙りかけます
885:デフォルトの名無しさん
20/02/15 14:11:39.55 DzNKB5Jj.net
>>857
VC++の場合、コンストラクタが無い場合、new が必要とする時間は 170クロック。
3.0GHz の CPUの場合、1.7 * 10^7 回(1,700万回)くらい new してやっと一秒
位。
だから、問題になるのは、1万回ループではなく、100~1000万回くらいのループ。
886:デフォルトの名無しさん
20/02/15 14:15:19.79 DzNKB5Jj.net
もちろん、スタック変数で済むならスタック変数の方がい
887:い。 ただ、スタックは容量に限りがあるので全部スタックという訳にもいかない。 ヒープにも限りはあるにはあるが、それは OSやマシンの限界。
888:デフォルトの名無しさん
20/02/15 14:25:57.86 BMoFghq4.net
そこでgotoなんですよ。
889:デフォルトの名無しさん
20/02/15 14:43:25.87 BMoFghq4.net
コレクションがソートの有無でだいぶ変わる。
trie_base_benchmark__sorted_words_1
trie assign.
409ms
size : 466551
words : 466551
trie insert.
762ms
size : 466551
words : 466551
std::set insert.
69ms
std::unordered_set insert.
149ms
(assigned) trie find.
24ms
(inserted) trie find.
25ms
std::set find.
194ms
std::unordered_set find.
63ms
890:デフォルトの名無しさん
20/02/15 14:44:57.19 BMoFghq4.net
trie_base_benchmark__random_words_1
trie assign.
2034ms
size : 466551
words : 466551
trie insert.
2026ms
size : 466551
words : 466551
std::set insert.
490ms
std::unordered_set insert.
146ms
(assigned) trie find.
158ms
(inserted) trie find.
169ms
std::set find.
477ms
std::unordered_set find.
62ms
891:デフォルトの名無しさん
20/02/15 14:46:37.02 BMoFghq4.net
挿入速度が変わるのは仕方ないとしても、検索速度が変わるのは、キャッシュじゃないかと思うんだけど。
892:デフォルトの名無しさん
20/02/15 14:49:41.43 BMoFghq4.net
std::sort: 306ms, (466551count).
先にソートしてから挿入したほうが速度的にお得っぽい。
893:デフォルトの名無しさん
20/02/15 16:03:09.29 0hgUDlXi.net
>>854
速いといっても
単純な演算と比べれば劇遅
894:デフォルトの名無しさん
20/02/15 16:18:40.81 qSK05WKV.net
>>867
とにかく、足し算/引き算が1クロック程度、new が170クロック程度だからね。
使い方を間違えなければ劇遅とはいえまい。
895:デフォルトの名無しさん
20/02/15 16:32:01.46 4O8uAQVX.net
auto hentai = SM(std::move(羞恥心));
896:デフォルトの名無しさん
20/02/15 17:12:18.08 BMoFghq4.net
newより+のほうが速いってことか。
897:デフォルトの名無しさん
20/02/15 17:25:57.34 BMoFghq4.net
+と-ならどっちが速いんだろう。
898:はちみつ餃子
20/02/15 17:49:06.00 cwLPNCdO.net
>>871
回路はほぼ共有してるんじゃないの?
2の補数を使うのもそれが理由なんだろうし。
少なくとも Pentium 時代まではクロックは同じだったはず。
近頃の事情は知らんけど
GCC あたりで強い最適化をかけてみても引き算か足し算を特に避ける様子もないので、
まあだいたい同じなんでしょ。
899:デフォルトの名無しさん
20/02/15 18:01:50.38 zARYy4pH.net
>>870
C++の場合、+ひとつだけでも裏でどんなコードが動くか油断ならない。
900:デフォルトの名無しさん
20/02/15 18:13:26.25 2RWOAy2H.net
>>871
+ と - で速度が違うCPUは見たことがない
- は順番が関係あるので
処理によっては遅い事がある
b = 1 + b
b = 1 - b
901:はちみつ餃子
20/02/15 18:14:19.52 cwLPNCdO.net
整数だけの話じゃなくてってことか。
ある程度の常識的判断が出来る場合もあるけど、
基本的には実装次第だわな。
902:デフォルトの名無しさん
20/02/15 18:19:46.61 2RWOAy2H.net
組み込み型じゃなけりゃそりゃね
+ でミサイル発射とか
903:デフォルトの名無しさん
20/02/15 19:02:33.35 qSK05WKV.net
>>870
new より + の方が 170 倍速いと言うことだ。
904:デフォルトの名無しさん
20/02/15 19:04:43.75 cVttwiPD.net
>>874
一度bをnegateしてから足す処理系があるかもな
905:デフォルトの名無しさん
20/02/15 19:30:46 qSK05WKV.net
>>874
確かに引き算には順序があるので、足し算より最適化に不利になることがある。
906:デフォルトの名無しさん
20/02/15 19:48:11.00 x3vECiAE.net
if(bReaZyuu){
907:デフォルトの名無しさん
20/02/16 00:34:55 pXV6w9YM.net
if (false != bReaZyuu) {
908:デフォルトの名無しさん
20/02/16 00:35:58 pXV6w9YM.net
newが常に数百クロックで済むと思ったら
間違いかもしれん…
909:デフォルトの名無しさん
20/02/16 01:50:35.50 1DEBeg9G.net
経験的にはnewが遅いと思ったことは無い。
なお、コンストラクタの処理時間以外はnewはmallocと同じ速度。
ゲームメーカーでも必要な場合に malloc を使うことは問題�
910:ネいとされている。
911:デフォルトの名無しさん
20/02/16 02:03:13.40 MPWqg8uW.net
new からしてmallocを呼んでる実装が多い気がする。
912:デフォルトの名無しさん
20/02/16 02:34:52 yR2k1LO6.net
そりゃnew用とmalloc用でヒープ別けたら無駄だし
913:はちみつ餃子 ◆8X2XSCHEME
20/02/16 02:36:27 VK9AAsv4.net
ヒープからの割り付けをする機会を減らすことで実行速度を上げる工夫はよく聞く話ではあるよな。
ただ、そこまでギリギリのチューニングが必要ってことがあまりないだけで。
914:デフォルトの名無しさん
20/02/16 07:37:50.08 Rlzwkt+8.net
newは最悪値が読めないからなぁ
組込とかシビアなゲームでは使い辛い
915:デフォルトの名無しさん
20/02/16 08:25:44.50 Yy7z+EdH.net
具体的な数字が出てるとイメージが湧く。
916:デフォルトの名無しさん
20/02/16 08:45:53 Yy7z+EdH.net
170クロックならあんまり気にする必要ないな。
917:デフォルトの名無しさん
20/02/16 10:26:07.87 w0IbR+6u.net
組み込みでc++がそもそもおかしい
918:デフォルトの名無しさん
20/02/16 11:00:34.43 1DEBeg9G.net
>>887
よっぽどでない限り、AAAゲームでも使われてるよ。
919:デフォルトの名無しさん
20/02/16 11:01:02.59 B02+i8yM.net
最近では小規模組み込みでもC++を使う事はあります
new / deleteやヒープを無効にしたり
newのみでdelete出来ないようにしたり
なんてこともあります
920:デフォルトの名無しさん
20/02/16 11:03:58.49 +vprjU7s.net
>>890
視野狭すぎ
921:デフォルトの名無しさん
20/02/16 11:12:03 w0IbR+6u.net
また馬鹿が無駄に一般化してできるワイ言ってんのか。。相変わらずだな。
922:デフォルトの名無しさん
20/02/16 11:20:41 +vprjU7s.net
日本語でおk
923:デフォルトの名無しさん
20/02/16 11:23:16 Yy7z+EdH.net
ストリームってなんで遅いんだろね。
924:デフォルトの名無しさん
20/02/16 11:39:47 Rlzwkt+8.net
>>891
そりゃそういう例もあるわな
だから何?w
925:デフォルトの名無しさん
20/02/16 11:42:38 Yy7z+EdH.net
スレで、do{}while()はダメっぽいこと書いてあったけど、なんでダメなの?
926:デフォルトの名無しさん
20/02/16 12:30:30 q7JzY0gs.net
>>887
でもお前は組み込みにもゲーム開発にも携わってないじゃん
927:デフォルトの名無しさん
20/02/16 12:42:15 Rlzwkt+8.net
>>899
ごめんねー、俺はプリンタ屋さんなのw
ゲームは知り合いの話ね
928:デフォルトの名無しさん
20/02/16 12:54:36 Yy7z+EdH.net
プリンタ屋さんってどんな仕事ですか?
929:デフォルトの名無しさん
20/02/16 12:58:53 Rlzwkt+8.net
>>901
俺は制御周り、上位インターフェースからのデータを描画ルーチンにに渡したり、下位インターフェースにデータ渡したり、パネルとかの制御をやってる
描画部分はまた別の人がやってる
930:デフォルトの名無しさん
20/02/16 12:59:56.11 Yy7z+EdH.net
なんか難しそうですね。
931:デフォルトの名無しさん
20/02/16 13:01:18.53 Yy7z+EdH.net
プリンタってプロセッサはどんな感じのを使うんですか?
newってあるんですか?
932:デフォルトの名無しさん
20/02/16 13:02:40.97 Yy7z+EdH.net
プリンタのヘッドについてる穴の数は決まっているんだから、あまりヒープが必要無さそうな気もする。
933:デフォルトの名無しさん
20/02/16 13:03:59.79 Yy7z+EdH.net
std::vectorの上にヒープを作っても速度的に大丈夫なことは確認した。
934:デフォルトの名無しさん
20/02/16 13:07:31.29 Rlzwkt+8.net
昔はSHシリーズとかR2000とか
今はARMもそれなりに使ってる
制御だとnewは基本使わない
あと俺がやってるのは業務用のLBP
935:デフォルトの名無しさん
20/02/16 13:08:47.09 Yy7z+EdH.net
ってことはキャノンですか。
936:デフォルトの名無しさん
20/02/16 13:10:53.15 Yy7z+EdH.net
メモ問題は結局ホワイトボード買ってきた。
ホワイトボードをワンノートに撮影するという昔っぽいことに。
937:デフォルトの名無しさん
20/02/16 13:11:07.93 Rlzwkt+8.net
流石に社名までは出せんわw
938:デフォルトの名無しさん
20/02/16 13:12:13.52 Yy7z+EdH.net
ワンノートのアンドロイド版はカメラにホワイトボードのモードがあるんだけど、テカリ消してくれないし、ホワイトバランスも調整してくれない。
939:はちみつ餃子
20/02/16 13:12:31.37 VK9AAsv4.net
PostScript くらいならプリンタの側で処理することもあるし、
世間で想像されているよりは高級なことをやっているんじゃないかなぁという気もする。
940:デフォルトの名無しさん
20/02/16 13:16:21 Yy7z+EdH.net
ってことは、別の人がnew使いまくり
941:なのでは。
942:デフォルトの名無しさん
20/02/16 13:17:17 Yy7z+EdH.net
テカテカしないホワイトボードないのかな。
943:はちみつ餃子 ◆8X2XSCHEME
20/02/16 13:20:18 VK9AAsv4.net
>>914
URLリンク(www.google.com)
944:デフォルトの名無しさん
20/02/16 13:20:51 Yy7z+EdH.net
ありがとん。
945:デフォルトの名無しさん
20/02/16 13:27:19 Yy7z+EdH.net
モーター動かしたりするのはnew使ったらダメなんだろな。
946:デフォルトの名無しさん
20/02/16 13:52:37.96 Yy7z+EdH.net
リアルタイムOSはヒープあるんだろか。
947:デフォルトの名無しさん
20/02/16 14:03:56.47 1DEBeg9G.net
>>900
ゲームに関しては、かなりちゃんとした現場で昔から malloc は使われていたし、全社的に使っても問題ないとされていた。
948:デフォルトの名無しさん
20/02/16 14:33:04.16 Rlzwkt+8.net
>>919
で?
使われてる例も使われない例もあるよ
タイミングにシビアなゲームだと使い辛いと言うだけ
949:デフォルトの名無しさん
20/02/16 14:34:24.22 Rlzwkt+8.net
>>918
最大実行時間が読める専用のヒープを持ってたりするよ
950:デフォルトの名無しさん
20/02/16 14:44:07.47 Yy7z+EdH.net
あるんだ。
951:デフォルトの名無しさん
20/02/16 14:49:10.64 B02+i8yM.net
>>918
ヒープを使うかどうか選べるものが多い
952:デフォルトの名無しさん
20/02/16 14:53:55.58 Yy7z+EdH.net
選べるってことは、用途によって使い分けが必要って事なんだろな。
953:デフォルトの名無しさん
20/02/16 14:59:29.04 D2RmZx9z.net
ループ内で可変長のvector使っているようなのは、外に出してループ始めにclearする方がいい
ループごとにvector出力しなきゃいけない場合も、moveしないでcopyした方がいい
954:デフォルトの名無しさん
20/02/16 15:03:54.38 k775l7KG.net
>>920
意見されたら喧嘩売りたくなる病気なの?
955:デフォルトの名無しさん
20/02/16 15:10:11 D2RmZx9z.net
mallocは使い方が余程ひどく無ければ、性能上問題になることはない
問題になっている場合もプロファイラでその部分だけ対策すればどうにでもなる
断片化やmalloc自体の管理領域容量が気になるほどの環境では使わない方がいいが
956:デフォルトの名無しさん
20/02/16 15:11:53 +ZTPu1gL.net
>>926
それお前じゃね?
957:デフォルトの名無しさん
20/02/16 15:13:28.86 +ZTPu1gL.net
>>927
リアルタイム系の仕事したことないならそう言う考え方でもいいと思うよ
958:デフォルトの名無しさん
20/02/16 15:17:30.49 D2RmZx9z.net
そもそもリアルタイム系の処理で、実処理部分でmallocするってのは普通しないよね
初期化時に必要なバッファはあらかじめ確保しておくものでしょ
そこはmallocだろうが静的確保だろうが変わらないし
959:デフォルトの名無しさん
20/02/16 15:23:06.64 8bxeBykO.net
>>929はループの中で毎回malloc freeしてるからそりゃ性能が気になるよね
960:デフォルトの名無しさん
20/02/16 15:24:31.11 1DEBeg9G.net
>>925
std::vector<TYPE> は、リンクリストではなく、「可変長配列」なので、std::list<TYPE> に比べて、TYPE のコンストラクタがデコボコした頻度で
多めに呼び出されてしまう傾向がある。TYPEのコンストラクタの中で何かをnew していると、new が呼び出される回数をグラフにした場合、
デコボコになるため、速度的に滑らかさがなくなってしまう可能性が考えられる。
それは、newの速度がデコボコなのではなく、std::vector が持つ悪い性質の一つ。
速度的に「滑らか」にしたいならば、std::list の方が適している。
そもそも、C言語がポインタを用意したのは、リンクリストを使いたかったからで、Cはデータ集合用のデータ構造として動的リストではなくリンクリストを用いるのが伝統。
Cの高速性とはリンクリストによるものと言っても過言ではない。
newも、mallocもコンストラクタも、リンクリストと最も相性が良い傾向がある。
cppreferenceなどでも、std::vectorが出てくることが多いが、Cの新かを発揮するにはstd::listの方が良い。
961:デフォルトの名無しさん
20/02/16 15:25:54.32 1DEBeg9G.net
>>932
誤:Cはデータ集合用のデータ構造として動的リストではなくリンクリストを用いるのが伝統。
正:Cはデータ集合用のデータ構造として動的配列ではなくリンクリストを用いるのが伝統。
962:デフォルトの名無しさん
20/02/16 15:27:49.69 D2RmZx9z.net
いやいや、速度がシビアならreserveしとけと
cとの親和性考えなきゃdequeも良いが、cのAPI呼び出し考慮すると結局vectorをうまく使うのが一番良い
963:デフォルトの名無しさん
20/02/16 15:28:20.99 1DEBeg9G.net
>>929
std::vector<TYPE>を使っていて、TYPEのコンストラクタの中でnewするのはリアルタイム処理には向きません。
その場合、std::list<TYPE>に変えれば劇的に速度が安定するはずです。
964:デフォルトの名無しさん
20/02/16 15:30:12.10 1DEBeg9G.net
>>934
CのAPI呼び出しで集合を渡す場合、通常、集合の要素はコンストラクタを持ちません。
その場合は、std::vectorは適すでしょう。
ところが、要素がコンストラクタを持つ場合は、std::listが適します。
965:デフォルトの名無しさん
20/02/16 15:32:54 D2RmZx9z.net
vectorで再配置する際にmoveされない前提なのね
966:デフォルトの名無しさん
20/02/16 15:33:13 1DEBeg9G.net
>>936
補足すれば、APIは、リング0のシステムランドで実装されていることが多いため、
リンクリストの様な複雑な構造が用いられることが少ないのです。
しかし、それはAPIに限った話で、Cは誕生したときから、要素数が変化する
集合には、動的配列よりもリンクリストを用いるのが伝統でした。
伝統と言うよりも、リンクリストこそがCの核心・本質といっても過言では有りません。
967:デフォルトの名無しさん
20/02/16 15:35:27 1DEBeg9G.net
>>937
C言語とはリンクリストのことです。
動的配列は、Cの文化ではありません。
968:デフォルトの名無しさん
20/02/16 15:36:04 MPWqg8uW.net
アドレスで直にアクセスできる言語の強みはリンクリストで活きるからごもっとも
969:デフォルトの名無しさん
20/02/16 15:40:23 +ZTPu1gL.net
>>930
そう言う事
平均的には間に合っても確保や解放にかかる時間が読めなくなる
100万回に1回でもダメならダメっていう世界だしね
>>931とかはそう言うことがわかってないので頓珍漢なレスになってるw
970:デフォルトの名無しさん
20/02/16 15:40:27 pXV6w9YM.net
>>934
reserveしただけだとOSによっては実メモリ確保しなさそう…
で初回アクセスでおもむろにページが用意されれる
ヨカン
971:デフォルトの名無しさん
20/02/16 15:42:34 D2RmZx9z.net
それだとmalloc使うこと自体不味いだろ
確率でmmapしちゃうのだから
972:デフォルトの名無しさん
20/02/16 15:44:00.56 pXV6w9YM.net
別に
>>925の前半でおk
973:デフォルトの名無しさん
20/02/16 15:46:21.91 D2RmZx9z.net
もちろん初期化時以外でね
974:デフォルトの名無しさん
20/02/16 16:01:46.00 1DEBeg9G.net
>>937
moveを使いたい場合、要素の TYPE クラスに move 用の記述が必要となるため、手間がかかります。
975:デフォルトの名無しさん
20/02/16 16:01:54.10 Yy7z+EdH.net
is_pod_vで事前条件を確認してるけど、PODはなくなるんだってね。
976:デフォルトの名無しさん
20/02/16 16:02:29.34 Rlzwkt+8.net
>>935
まあお前がそう思うならそうなんだろうな
お前ん中ではな…
977:デフォルトの名無しさん
20/02/16 16:07:00.64 D2RmZx9z.net
listで美味しいのはsplice使いたい時くらいだろ
multi threadのログ統合したい時とかに、lockに必要な時間を最小化出来る
978:デフォルトの名無しさん
20/02/16 16:26:27.54 c8Po0Swg.net
>>947
POD = trivialかつstandard_layout
だから後者を使うようにすればいい
979:デフォルトの名無しさん
20/02/16 17:05:35.53 +vprjU7s.net
子スレッドを休眠状態で作る方法ない?
起動直後にcondition_variable::waitとかじゃなく
初期状態として
980:デフォルトの名無しさん
20/02/16 17:13:29.37 YrNuZAe7.net
何のために?それによる
981:デフォルトの名無しさん
20/02/16 18:53:05 Yy7z+EdH.net
>>950
ありがとん。
982:デフォルトの名無しさん
20/02/16 21:26:26 D0JJuQrX.net
>>953
いえいえ
983:デフォルトの名無しさん
20/02/16 23:16:48.80 B02+i8yM.net
>>924
まあそりゃね
使えるようにしてもPCやスマホのように自由には使えないぞ
こまめに確保解放なんてことはしない
基本最初に確保して終わり
解放はしない
だから確保しか出来ないヒープも選べる
984:デフォルトの名無しさん
20/02/16 23:20:30.34 B02+i8yM.net
>>927
それはPCやスマホなどリッチな環境の場合
>>931
一見軽そうで重い関数があったりするから
同じ人が同じ時に作ってたらそんな処理にはしないだろうけど
985:デフォルトの名無しさん
20/02/17 00:08:48 U44ZlMgK.net
白物家電のマイコンやら、pfcのマイコンやらもやったが、そんなのはそもそもmalloc使うような環境じゃなかったしなぁ
RAMもkB単位で少ないし、自由に関数呼べるほどスタックも無いし
割り込み部分はアセンブリで書いてた
986:デフォルトの名無しさん
20/02/17 00:14:53 /jKzm6f9.net
今は冷蔵庫や電子レンジもAI積んでネットワークに繋がるIoT時代だけど
それでも組み込みって未だにそんな感じなの?
987:デフォルトの名無しさん
20/02/17 00:16:48 U44ZlMgK.net
まあそれは特に東南アジア向けだったし
日本よりさらにチープだったのかも
988:デフォルトの名無しさん
20/02/17 00:19:59 uafn9Eqq.net
>>958
そんなのごく一部
989:デフォルトの名無しさん
20/02/17 00:20:59 uafn9Eqq.net
いまだにチープな8bit CPUもたくさん使われている
990:デフォルトの名無しさん
20/02/17 00:23:25 U44ZlMgK.net
cortex-m0とか載ってたらもう小躍りしちゃうくらいのリッチさだよね
991:デフォルトの名無しさん
20/02/17 00:34:16.83 H8nvOahp.net
リッチなCPUを使うって事は
それだけ求められる事が大きいわけで
992:デフォルトの名無しさん
20/02/17 07:41:59.44 xyBTOgD8.net
でもCPU節約するために人件費かけて結局商品高いじゃん
993:デフォルトの名無しさん
20/02/17 09:22:40.01 usLteeFN.net
趣味じゃないんだから
当然トータルで考えるよ
開発工数、単価、機能性能、信頼性、供給、大人の事情、...
994:デフォルトの名無しさん
20/02/17 10:36:24 sgjaAMaL.net
ゲーム業界の人だけど
new使っても問題ないってのはおれの常識とは異なる
まず問題が広すぎる
言いたいことはデフォルトのグローバルヒープを無邪気に使っていいか
ということだと仮定すると
AAAクラスでそんな杜撰なことしてるところはないと思う
組み込みもそうだがリアルタイム性が必要とされるところでは、メモリ予算というものがある
グラフィック、オーディオ、ネットワークなどのモジュールごとにメモリいくらと決められる
モジュールの責任者はその中でやりくりする
ここで大事なのはメモリの最大使用量を保証しなければならないってこと
必要ならローカルのヒープは作ったりするが、この時点で担当者が気ままにnewってのは認められない
基本的にすべてコントロールされる
現実的に最大量が正確に見積もれないものもあるがそれでも最大量は決める
995:デフォルトの名無しさん
20/02/17 10:57:08.38 sgjaAMaL.net
といってもグローバルヒープを使わないわけじゃない
オープンソースのもので無邪気にmallocするものは多数あるが、それほど荒ぶらなければそのまま使う
(リアルタイム性が不要なら仮想メモリに任せる)
あとmalloc遅くないという論調の人がいるけどそれはベストケースの話でしょう
ヒープメモリが不足したり一度に巨大なメモリを確保する場合はシステムコールになるからずっと遅くなる
ワーストが見積もれないものはリアルタイムで使いづらい
まぁ昨今は仮想マシン上で動くゲームが多数あるわけで気にしなくていいレベルという意見はある
ただesports系で一瞬カつくとか商品性に関わるわけで
また後から直すのも地獄なので
最初から計画的に作るべきだろう
996:デフォルトの名無しさん
20/02/17 11:06:49.04 tDJaHp5K.net
ここC++スレだよね、つかぬことだけど
記憶管理はいつでも如何様にもカスタマイズできるようにtypename Allocatorになってるわけじゃん
なんでいきなり組み込みには向かないとかキリッてんの?
997:デフォルトの名無しさん
20/02/17 12:20:34.06 ipOy1V1j.net
>>968
typename Allocatorとかすげぇ初心者っぽい
キリってるのはお前だ
998:デフォルトの名無しさん
20/02/17 12:22:54.84 tDJaHp5K.net
>>969
kwsk
999:デフォルトの名無しさん
1000:sage
>>968 標準ライブラリでもallocatorが指定できないものもあるんだよ もはや今のc++で標準ライブラリを全面的に使いつつ、ヒープを個別に差し替えるのはかなり非現実的だ allocatorを差し替えられてもnewするタイミングや量はリバースエンジニアリングしないとわからない それが問題になることもある
1001:デフォルトの名無しさん
20/02/17 12:48:18 2c+OKT/4.net
てか、静的確保したメモリブロック使うアロケータ書いてそれで標準コンテナ使うのが基本じゃね
まあeastlでも良いが
1002:デフォルトの名無しさん
20/02/17 12:51:50 tDJaHp5K.net
>>971
> 標準ライブラリでもallocatorが指定できないもの
例えば?
newだってoperator newですぐカスタマイズできるし
placementで環境依存の細かい設定もできる
ライブラリはISO/IEC14882に固執する必要はなく
サードパーティでも内製でもより都合のよいほうを使えばいい
というだけの話
1003:969
20/02/17 12:56:55 nfQInp9b.net
カスタマイズの話なら真っ先にnewの話をすべきなんだが順番おかしくね?
ていうか今時はallocatorより先にpolymorphic resourceだと思うが
というかそもそもmallocの速度の話からであって、いきなりallocatorの話したり
C++全体を否定されたかのように過剰反応するとか・・
1004:デフォルトの名無しさん
20/02/17 13:12:34.13 y136Nw0W.net
仕様通りに書けばいい感じにうごいてくれて、責任は俺にはないとか
思い込んでんじゃってるキッズなんだろう。
デバッグするなんてことはもちろん頭にない。
1005:865
20/02/17 13:34:28 FC0zZXW0.net
>>890からの流れでは直後からnewが出てきてたろ
C++が組み込みに向かないという主張の
理由がmallocじゃおかしいだろ
それしか使えんわけでもなし
1006:デフォルトの名無しさん
20/02/17 13:44:11 nfQInp9b.net
>>968に突っ込むと>>890に同意したことになるのか
1007:デフォルトの名無しさん
20/02/17 14:00:21 sgjaAMaL.net
>>973
> > 標準ライブラリでもallocatorが指定できないもの
> 例えば?
でしょ?
お前さんは人並み以上にc++知ってると思うけどこの事実知らない
どこで使われてるか知らなきゃ置き換えができないよね
答えはあえて教えない
標準ライブラリのヘッダーをnewでgrepすればallocatorを通さないものが見つかるさ
自分で確認してこりゃ置き換え無理だわと悟って欲しいw
もし見つからないなら後で書くよ
ちなみにグローバルにnewを置き換えるぐらいならmallocのバイナリを差し替えた方が早いし確実
1008:はちみつ餃子 ◆8X2XSCHEME
20/02/17 14:31:40 qpTD/rYC.net
おっ。
野党みたいなことを言い始めたぞ。
1009:デフォルトの名無しさん
20/02/17 14:37:47 nfQInp9b.net
>>979
横からだが、具体的に誰のどこを指してそう思ったのかよろしく
1010:デフォルトの名無しさん
20/02/17 14:59:36 QYRwM+i2.net
>>966
もちろん、むやみやたらと使って全く問題ないわけではない。
が、本当に必要な箇所で使う程度なら(多くの場合)余り問題ないという程度。
大体ゲームの場合のnewやmallocは、敵や弾やイフェクト、3Dオブジェクトなど
を1つずつ収めるために使うことが多いが、ゲームの1シーン内に登場する個数が
newやmallocが問題ない程度に元々なっている事がわりと多いと言うだけ。
3Dの雑草の葉っぱ一枚単位で new したりすると問題になってくるかもしれない。
1011:デフォルトの名無しさん
20/02/17 15:51:15.09 sgjaAMaL.net
>>981
なんとも感覚的な話だね
だいたい動けばOK!って感じ?
おれは仕事でそういうもの作りはしない
1012:デフォルトの名無しさん
20/02/17 16:08:54 HCTe1ZqE.net
コンシューマかPCかでも違うだろうし
(自分はさほど詳しくないが、基本コンシューマは標準ヒープ使わないはず)
ジャンルによっても違うんじゃね
PCのMMORPGなんかだとシーン中のメモリ確保は必須だろうし
あと草は普通同じメッシュやテクスチャ使うだろうし、揺れを入れるにしても一つ一つにデータ持たせるなんてアホなことしないだろ
1013:デフォルトの名無しさん
20/02/17 16:15:08 tDJaHp5K.net
>>978
「後で」かw
もう1000間近だし期限切らないでおけば時効だろってか?
1014:デフォルトの名無しさん
20/02/17 16:32:36.59 y136Nw0W.net
いやそれくらい調べろって話だろ。。馬鹿が。
1015:デフォルトの名無しさん
20/02/17 16:44:43.28 tDJaHp5K.net
>>985
sgjaAMaLが、自分の話に傾聴してきた人の質問に答えなかった
つまり自分の考えを伝える努力を中止したということでしかない
何人も自らの意見を他人に伝えるには
その意見を説明するしかなく
説明をやめることは沈黙に等しい
1016:デフォルトの名無しさん
20/02/17 16:55:56.23 9WiS2n1W.net
黙って調べてくれば?
調べて無いと結論づけられればまた偉そうに出来るだろw
1017:デフォルトの名無しさん
20/02/17 17:15:39.87 9Dh9neDd.net
ちゃうねん。
僕が組み込みいうたのはArduinoのことな。
RAM2KBやし。
1018:デフォルトの名無しさん
20/02/17 17:31:33 9Dh9neDd.net
Arduino面白いよ。
1019:デフォルトの名無しさん
20/02/17 18:25:59 sgjaAMaL.net
>>984
条件は明示してるんだからおれが書くかはお前に委ねられている
1000が迫っているぞw
1020:デフォルトの名無しさん
20/02/17 18:30:32 T3Z0MUY2.net
この手の人最後まで答えないか
答えても的外れなのしか見たことないわ
1021:デフォルトの名無しさん
20/02/17 18:32:18 wtNXL+i7.net
だね
消えて良いよ
1022:デフォルトの名無しさん
20/02/17 19:27:27 XybgTXf7.net
>>978
std::arrayとか言わないよね
1023:デフォルトの名無しさん
20/02/17 19:33:45 nfQInp9b.net
arrayのどこに動的メモリ確保が出てくるんだよ
アホか
1024:デフォルトの名無しさん
20/02/17 19:46:45 9Dh9neDd.net
なぞなぞですか。
1025:デフォルトの名無しさん
20/02/17 23:00:17 HZSaiYXA.net
漏れはnewのときたまの遅さの可能性に警鐘を鳴らしたからセフセフ、
1026:デフォルトの名無しさん
20/02/17 23:06:03 HZSaiYXA.net
やっぱnew/deleteのレイテンシーを設計に乗せるには非ページプールメモリにアロケートするべきですよねー
1027:デフォルトの名無しさん
20/02/17 23:19:17 sgjaAMaL.net
なんかスレ止めてたら悪いから書いておくよ
ひとつは17からallocatorがdeprecatedになったstd::functionね
これは結構知られてるばずだ
定期的にこれ濫用する人が現れるんだけど中身理解してから使うか判断しろと職場では言っている代物
もうひとつあげるなら、
処理系によってかなり違うかもだけどstd::threadも中でこっそり内部クラスをnewしてるはず
ただスレッド間で引数を引き渡すためのものでサイズは小さいしスレッド作るコストの方が遥かにでかいから問題にはなりにくい
他にもあるけどとりあえずこんなもんで
1028:デフォルトの名無しさん
20/02/17 23:46:06.60 HZSaiYXA.net
std::functionを使わないと1 bitもプログラムが書けなくなった漏れガイル、
クロージャをいちいちクラス定義から手で書く日々に戻るのはいやじゃー
1029:デフォルトの名無しさん
20/02/17 23:54:13.03 HCTe1ZqE.net
1000なら>>986, >>991-992が土下座
1030:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 17日 3時間 0分 7秒
1031:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています