C++相談室 part149

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2020/02/18(火) 06:19:41.54ID:xvjipUWj
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part148
https://mevius.5ch.net/test/read.cgi/tech/1580471646/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1556142878/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
2020/02/18(火) 07:30:53.57ID:6S1dA7EZ
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

---- テンプレ ここまで ----
2020/02/18(火) 07:50:56.98ID:KHr4ndHy
std::functionを使うなと言われたのは残念だが
newのときたまの遅さの可能性に警鐘を鳴らしたから勝利宣言しちゃおうかなっ
かなっ
2020/02/18(火) 08:39:06.73ID:vOZ3pUbp
>>1
2020/02/18(火) 10:35:35.23ID:xvjipUWj
function・・・それだけか?
なんか組み込みにC++は向かないとまで
大きく出る理由として弱すぎね?
2020/02/18(火) 10:36:23.95ID:xvjipUWj
あ、IDは気にしないでね
スレ主としての発言じゃないよ
2020/02/18(火) 10:43:38.96ID:TnY2bwh5

それ言ってたのは別の人だし過剰反応しすぎだろ

というかあのキッズを叩くと必ず単発煽りが出てくるのは恐らく同一人物だろうな

>>3
標準ヒープ使われてもいいなら使えばいいじゃん
2020/02/18(火) 10:48:05.96ID:xvjipUWj
君は誰?
組み込みにC++は向かないなんて思ってないなら
俺はそれ以上言うことないけど
2020/02/18(火) 10:55:26.54ID:TnY2bwh5
>標準ライブラリでもallocatorが指定できないものもあるんだよ
の人ではないよ

というか何がそんなに気に入らないのかね
組み込みに向かないと言ってた人はArduinoがどうこう言ってたろ
実際RAMが少ない環境ではかなり慎重に使わざるを得ないんだろ、知らんけど
2020/02/18(火) 11:00:57.59ID:Nm2LYTxd
std::function は (呼び出しの型が一致さえすれば) どんな関数オブジェクト (または関数ポインタ)
でも格納できるというのは強いんだが、
実際にはコンパイル時に型が確定できる場合の方が多いと思うので
std::is_invocable_r で制約を付けた方が少し性能は良いと思う。

でもテンプレートって型引数ごとに実体化されちゃうから、
素朴に考えると引数をラムダ式で与えてたら呼び出しごとに実体化されることになっちゃうよな……。
(最適化で上手く統合されることもあるかもしれないけど。)
どちらを選んでもいいことばかりではないので、結局は場合によるとしか。
2020/02/18(火) 11:05:28.20ID:xvjipUWj
>>9
何がってそのままだよ
組み込みにC++は向かない、という意見に反対だ
2020/02/18(火) 11:09:15.65ID:TnY2bwh5
だから過剰反応しすぎだろ
functionの話してた人はゲームだろうが
反対するなら根拠を示せばいいし
少なくとも別の人の話は混同するな
2020/02/18(火) 11:11:12.73ID:TnY2bwh5
>>10
ラムダなら実体化っつっても毎回関数オブジェクト作るのと変わらんやろ
2020/02/18(火) 11:13:33.03ID:xvjipUWj
IDなんかアテにならない
基本的に匿名掲示板なんだから
人違いはそう言えばいい

もっとも、それを信じるかどうかは別だが
2020/02/18(火) 11:19:56.99ID:TnY2bwh5
まさか前スレID:tDJaHP5Kじゃないだろうな?
2020/02/18(火) 11:42:54.44ID:xvjipUWj
>>15
いや俺tDJaHP5Kだよ
過剰反応するなっていうおまえさんこそ
なんでそんなにとんがってるんだ?
色々勘ぐってしまうぞ
2020/02/18(火) 11:48:32.16ID:TnY2bwh5
>「後で」かw
>もう1000間近だし期限切らないでおけば時効だろってか?
こんなん書いてよく開き直れるな
側から見てて気分悪かったぞ
ちなみに俺は前スレnfQlnp9bな
2020/02/18(火) 11:55:50.57ID:Nm2LYTxd
>>17
それは妥当だろ。
あの場面ではライブラリにアロケータを指定できない場合があると主張しながら例を示さない
のは議論の仕方がわかってないクズだし、そういう奴に遠慮してたら話が進まねーよ。
2ch って元々そういうところじゃん。
2020/02/18(火) 11:59:04.13ID:xvjipUWj
ああ、あいつか
元々newの話だったのに
mallocの話だってクレーム垂れてきたやつね
2020/02/18(火) 11:59:40.16ID:TnY2bwh5
は?頭湧いてんのか?
最終的に例出されたなら反論か謝罪かどっちかだろ
そこで逃げるという選択が取れる方がよっぽどクズだと思うがな
2020/02/18(火) 12:01:31.50ID:TnY2bwh5
毎回荒れる原因作ってんのお前らだろ
さんざん煽って言い返せなくなったら別人に成り済まして単発煽り入れたり
マジ邪魔だわ
2020/02/18(火) 12:03:20.38ID:xvjipUWj
それから俺は元々特定のレスや人物に異を唱えたわけではなく
流れ全体に対しておかしいと思ったことを言ったのが968だったぞ
2020/02/18(火) 12:07:30.24ID:Nm2LYTxd
>>20
前スレで野党に喩えたのはそういうとこね。
事実関係は議論の前提だから、共有しないで先延ばしする理由はない。
カルトクイズに答えられない相手を見て悦に入るようなやつがクズでなくてなんなんだ。
2020/02/18(火) 12:08:17.71ID:xvjipUWj
だいたい喧嘩売ってきたのは978で
それまで平和的に話していた俺が
ひとこと言い返したのだけ取り上げて
気分悪いとかどういうバイアス持ってるんだよ
2020/02/18(火) 12:11:28.72ID:TnY2bwh5
>前スレで野党に喩えたのはそういうとこね。
それはどうでもいい、問題にもしてない

>カルトクイズに答えられない相手を見て悦に入るようなやつがクズでなくてなんなんだ。
悦に入ってたかどうかは本人に聞け
というか調べ方は出してくれてただろうが

お前も都合の悪いことからはとことん逃げるから、悪いが相手したくない
2020/02/18(火) 12:14:37.63ID:TnY2bwh5
>>24
>>978もそれまでのお前の態度と同程度には平和的だと思うが
どういうバイアス持ってるんだよ
悪いがもうキチガイキッズの相手はしたくない、絡んで悪かったな
2020/02/18(火) 12:17:59.50ID:xvjipUWj
自己弁護にしか見えねえ
どうやら勘ぐりは当たってたようだな
2020/02/18(火) 12:21:22.79ID:TnY2bwh5
アホか
俺が前スレ>>978本人だったらもっといじり倒してるわ
2020/02/18(火) 12:27:49.37ID:xvjipUWj
言えば言うほどドツボだぜw
2020/02/18(火) 13:53:54.86ID:Nm2LYTxd
MinGW のライブラリを見てたら std::function にも SSO が入ってる。
データメンバの総計が 16 バイト以下の関数オブジェクト (キャプチャした変数が少ないラムダ) なら new は呼ばれない。

※ string ではないのにこの最適化を SSO と呼んでいいものなのかどうかわからん
※ 16 バイトというのは環境によるだろうし、 SSO がないこともあるだろう
※ とはいえ、主要な実装ではだいたい有ることを期待できるのではなかろうか

間接参照にはなるから std::function はわずかにコスト高には違いないかもしれないけど、
ちょっとしたことに使う分には急激に実行コストが上がるというほどではない。

リソースの限られた組み込み環境だといずれにしても基本的なライブラリも
自前で用意せざるを得なかったりもするだろうし、
標準ライブラリをフルセットで使えるほどの環境ならみみっちくリソース消費量を抑える必要もないだろうから、
使いどころが適切であれば全体としてはあまり問題にならなさそうという感想。 (あくまでも個人の感想です!)
31デフォルトの名無しさん
垢版 |
2020/02/18(火) 17:23:06.88ID:iYoDhrK1
ちゃうねん。
2020/02/18(火) 17:35:08.64ID:Nm2LYTxd
そうか (´・ω・`)
33デフォルトの名無しさん
垢版 |
2020/02/18(火) 17:37:59.36ID:iYoDhrK1
僕はArduinoこそC++パワーが必要と言ってるんですよ。
34デフォルトの名無しさん
垢版 |
2020/02/18(火) 17:41:06.24ID:iYoDhrK1
Arduinoは様々な亜種があるので、テンプレートでゴニョゴニョすると、何かいいことが起きるのではないか?
そんなことを議論してほしいわけですよ。
メモリーは2KBしかないけれども。
35デフォルトの名無しさん
垢版 |
2020/02/18(火) 17:45:54.66ID:iYoDhrK1
ちなみにエルチカとこんな感じ。
最大32256バイトのフラッシュメモリのうち、スケッチが932バイト(2%)を使っています。
最大2048バイトのRAMのうち、グローバル変数が9バイト(0%)を使っていて、ローカル変数で2039バイト使うことができます。
2020/02/18(火) 17:46:01.07ID:Nm2LYTxd
>>33-34
僕って誰や?

ランタイムのパワーが必要ないものはリソースの少ない環境用に積極的に活用するべきだとは思う。
Arduino についてはよう知らんけど、ドキュメントを見た感じだと type_traits のような
(実行時の) マシンパワーが要らないようなものまで除く必要はないやろという気持ちになる。
37デフォルトの名無しさん
垢版 |
2020/02/18(火) 17:48:36.87ID:iYoDhrK1
C++標準ライブラリはないけどテンプレートは使えます!
38デフォルトの名無しさん
垢版 |
2020/02/18(火) 17:51:48.28ID:iYoDhrK1
魔術師が活躍する舞台として最高だと思いますが。
なぜ参入してこないのか。
39デフォルトの名無しさん
垢版 |
2020/02/18(火) 17:58:28.64ID:iYoDhrK1
Running 5 test cases...
---------- std_algorithm__adjacent_find_1 ----------
std::vector<std::uint32_t>
size(): 104,857,600
std::adjacent_find: 66ms

---------- std_algorithm__is_sorted_1 ----------
std::vector<std::uint32_t>
size(): 104,857,600
std::is_sorted: 66ms

---------- std_algorithm__sort_1 ----------
std::vector<std::uint32_t>
size(): 1,048,576
std::sort: 119ms

---------- std_algorithm__unique_1 ----------
std::vector<std::uint32_t>
size(): 5,242,880
std::unique: 4ms

---------- std__vector__copy_1 ----------
std::vector<std::uint32_t>
size(): 104,857,600
copy assignment: 220ms
new std::uint32_t[]
size: 104,857,600
std::memmove: 55ms

*** No errors detected
40デフォルトの名無しさん
垢版 |
2020/02/18(火) 17:59:19.58ID:iYoDhrK1
一億個コピーで220msだった。
2020/02/18(火) 18:04:45.17ID:Nm2LYTxd
>>38
たぶん探せばそれっぽいライブラリもあるんちゃう?
https://www.google.com/search?q=Arduino++C%2B%2B+template+library
42デフォルトの名無しさん
垢版 |
2020/02/18(火) 18:05:23.55ID:iYoDhrK1
ありがとん。
2020/02/18(火) 18:08:56.36ID:sX1qjJQt
>>30
SSO = Small-string optimization
44デフォルトの名無しさん
垢版 |
2020/02/18(火) 18:13:40.86ID:iYoDhrK1
Arduinoも一応newは使える。
使わないけど。
2020/02/18(火) 18:25:28.71ID:Nm2LYTxd
>>44
new を使わずに、かわりにどうすんの?
46デフォルトの名無しさん
垢版 |
2020/02/18(火) 18:27:32.40ID:iYoDhrK1
2KBしかないからローカル変数。
47デフォルトの名無しさん
垢版 |
2020/02/18(火) 18:31:23.28ID:iYoDhrK1
基本的にグローバル変数を駆使するしかないけど、結構強烈に最適化かかるので、意外と2KBで何でもできる。
2020/02/18(火) 18:45:24.62ID:Nm2LYTxd
プログラムが極端に小さいなら高度な抽象化をする甲斐がない。
抽象レイヤを挟むことで綺麗になるよりも複雑さが増すだけになりがち。
本当に使いまわす部品は綺麗に整理するに越したことは無いけど、
メモリ 2KB かそこらの環境ならベタ書きで十分でしょ。 (YAGNI 原則)

C++ が組み込みに向いていないとは言わないけど、
そのレベルで極端にリソースが制約されている状況では必要でもないと思う。
49デフォルトの名無しさん
垢版 |
2020/02/18(火) 18:46:17.48ID:iYoDhrK1
パソコンでは、恐れることなくnew使って良いと思うけど、static_vectorというのも自作した。
2020/02/18(火) 18:48:40.47ID:Nm2LYTxd
>>48
もちろん単にやるのが楽しい! というのも動機としてはありうるので趣味でやる分にはどんどんやったらいいと思うけど。
51デフォルトの名無しさん
垢版 |
2020/02/18(火) 18:48:49.63ID:iYoDhrK1
>>48
まあ確かに。
でも使いまわし出来ると便利だし、C++なら...やってくれる!
2020/02/18(火) 18:58:47.76ID:CLqeafa/
いやいや、固定小数点とか組み込みだからこそのtemplateがふさわしい場面は結構あるよ
53デフォルトの名無しさん
垢版 |
2020/02/18(火) 19:00:28.24ID:iYoDhrK1
小数点難しいよね。
難しすぎるわ。
2020/02/18(火) 19:15:07.85ID:Nm2LYTxd
>>49
どういう意味で static なの?
大きさが固定ってこと?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況