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

|