C++相談室 part132

■ このスレッドは過去ログ倉庫に格納されています
2017/10/10(火) 00:11:34.01ID:nc/5PI4P0
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part131
http://mevius.2ch.net/test/read.cgi/tech/1501295308/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.101【環境依存OK】
http://mevius.2ch.net/test/read.cgi/tech/1500329247/

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

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2017/10/10(火) 00:12:56.93ID:nc/5PI4P0
散々スレ散らかしておいて挙句誰もスレ立てないとか何なんだよおい
3デフォルトの名無しさん (ワッチョイ fd79-zkbM)
垢版 |
2017/10/10(火) 00:17:51.84ID:UbDU2trc0
>>1
2017/10/10(火) 00:20:07.57ID:QENrkQd80
swap(a,1);
2017/10/10(火) 00:34:49.46ID:xPjXx2fY0
int&& x=1;
乙 << x;
2017/10/10(火) 00:37:53.16ID:xPjXx2fY0
swap(T& x, T& y) { T tmp = x; x = y; y = tmp; }を
swap(T&&x, T&& y) { T&& tmp = x; x = y; y = tmp; }とかやったら死ぬ気しかしない
2017/10/10(火) 02:42:57.50ID:wYOMkRRU0
2 名前:デフォルトの名無しさん (ワッチョイ bf54-lR6P)[sage] 投稿日:2017/03/31(金) 16:52:18.52 ID:CoeIAoH10
STLつかうと一気に実行ファイルサイズが10倍に?!

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

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

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

#include <stdafx.h>
後死ね。

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

---- テンプレ ここまで ----
2017/10/10(火) 12:31:02.91ID:EzEz7dGm0
テンプレに
>>970が建ててね
辺りを追加しとこうぜ
2017/10/10(火) 15:13:46.21ID:S8JfuHhfd
開発的なお話で単純に構造体の要素を一つ追加するって危険な行為でしょうか?
2017/10/10(火) 15:40:18.46ID:NgeFZ2kOM
質問がふわふわし過ぎ
そんなんじゃまともな回答は無理

個人的には
メンバをひとつ追加する程度で
破綻のリスクが増えるというなら
それは元々破綻していて
表面化していないだけだろうと思うが
2017/10/10(火) 16:32:52.19ID:S8JfuHhfd
>>10
ふわふわしすぎてました
意味合いとしては答えてくれてることで合致してます

メンバ変数を一つ追加することでその他への影響は大きいでしょうか?って意味でした
2017/10/10(火) 16:49:55.22ID:RmsAElXwd
>>11
メンバー変数を増やすと、構造体のサイズが増大する。また、変数の追加する場所によっては、メンバーの相対的な位置が変化する可能性がある。
よって、その構造体のバイナリーインターフェースに依存するプログラムは死亡する可能性がある。
2017/10/10(火) 17:03:33.96ID:RmsAElXwd
例えば、構造体データをバイナリーとしてファイルに出力していたら、サイズの増えた構造体では正しく読み取れない可能性がある。
構造体のメンバーの相対的位置が変化したら、古い構造体を使っている他のプログラムとは相性が悪くなる。
2017/10/10(火) 17:13:40.90ID:RmsAElXwd
Windows APIでは、構造体をバージョン管理して、構造体のサイズで処理を変えたりしている。
2017/10/10(火) 20:42:09.59ID:ISsQMV5w0
>>14
たまに半端な位置に「予約」とか説明されてるメンバがあったりするよね。
あれはバイナリサイズが変わると困るような理由があるからなんかなぁ。
まあ、たいした理由もなくやっちゃって互換性ゆえに変えられなくなったとかだろうけど。
2017/10/10(火) 22:10:42.42ID:RmsAElXwd
>>15
位置やサイズが違うとバグのもと。
昔はよく
#include <pshpack1.h>
...
#include <poppack.h>
を書いたものだ。
2017/10/10(火) 22:48:32.16ID:muYZ22/tM
膝を撃ち抜く自由も良し悪しだな。
2017/10/10(火) 23:50:05.54ID:4EEs5NsC0
cURLを限りなくスペックの低い組み込み機器に入れようとしてるところで問題が起きました

・処理能力が低い

cURLをsystem関数でコマンドライン実行しようとすると、
呼び出す側の処理がCPU50%平均的に食っている+cURLもCPU喰うでまともに通信が出来ません

呼び出す側を落とすとcURLの処理速度は改善されるから
確定でCPUの食い合いが原因ってのもわかっている

対策として下記二つが出たのだけど
・呼び出す側をcURLが実行中はsleepにする
・cURLを実行ファイルで取り込むのではなくプログラミングベースで取り込む

上は常に通信をしているためにsleepを挟むことはできず
下のプログラミングベースについてもクロスコンパイルの問題でなぜか上手く行かない
これ以外の方法で対処方法ってありますか?
2017/10/10(火) 23:55:48.47ID:RmsAElXwd
>>18
なぜかうまくいかないときのエラーメッセージは何だ?
2017/10/11(水) 00:02:11.03ID:qOpcxgfAd
スペックが低いなら、そもそもマルチスレッドが未実装の可能性がある。
ならばsleepは無意味ということになるかも知れない。
2017/10/11(水) 00:06:14.17ID:qOpcxgfAd
スペックが低すぎると、ANSI Cなどの規格に準拠してない恐れがある。
マシンとコンパイラーのマニュアルを確認して、準拠状況を確認しろ。
2017/10/11(水) 02:03:02.75ID:xVJHolx50
>>18
状況がよくわからんなぁ。
system 関数自体は普通は同期的だよね?
スレッドを分けて system 関数を実行した上で、
メインプロセスと cURL がプロセス間通信
2017/10/11(水) 02:03:35.16ID:xVJHolx50
してるってことかな。
(すまん、ミスって変なところで投稿してしもうた)
2017/10/11(水) 02:18:21.03ID:xVJHolx50
この件に関しては >>19 の疑問が当然だなぁ。
クロスビルドでこの手の問題がありがちなのは、
ライブラリのサーチパスとかかな。
ライブラリが見つからんとかメッセージ出てないかね?
2017/10/11(水) 02:27:32.03ID:qOpcxgfAd
http://www.ne.jp/asahi/hishidama/home/tech/c/exec.html#h_fork
forkを使えば、プロセスを分けることができるらしい。
2017/10/11(水) 06:22:13.21ID:Fgfx0EWk0
>>19
undefined 系統のエラーが沢山出る
arm-linux-gnueabi-gccを使ってコンパイルするとそうなる
ただgccだとエラーは起きない。ただi386系になるから実行環境で動かない

クロスコンパイルでcURLの単体がARMにできているから
.aファイルもARM担っていると思っているのだけどもなっていないのだろうか
objdump実行でARMって文字を確認したからARMだと思いたいとこではあるが…

エラー時の実行例
arm-linux-gnueabi-gcc test.c -o test.out -LXXXXXX -lcurl

通るけどi386系で実行環境で実行できない
gcc test.c -o test.out -LXXXXXX -lcurl

>>22
今の状況はPCA-PCBと通信がしたい。着目しているのはPCA
PCAがPCBと通信をする独自規格を元々持っていたのだけど、そのPCAが持っている独自規格を色々な規格をサポートしているcURLに置き換えるって話

今まではPCAの中のメインプロセス(CPUを一番食っているやつ)が通信を行っていただけだったから特に問題は発生しなかったけども
今回はメインプロセスがcURLをコマンドライン実行で呼び出す設計にしようとしている
そのためメインプロセスと別のcURLというプロセスが起動することになると考えている

なので、実装前にメインプロセスが生きている状態で直接コマンドプロンプトでcURLを実行し、動作検証したら通信自体はできるけど動作がとても遅いってとこ露に行きついた
調べてみると、メインプロセス・cURLともにCPUを食いあって速度が遅くなっていることも確認できて
どうやったら上手く実装できるだろうか…と悩んでいるところです

sleepに関しては実装して確認したわけではないけど、kill -stop PIDで実行したら
上手く行ったからsleepも上手く組み込めば対応できrのではないかと思ってる

>>25
forkでこれ以上増えるとさらに遅くなると思ってる…
2017/10/11(水) 07:22:11.99ID:pdXZ47r80
メンバ変数が1個増えたぐらいで崩壊するのは
対外的にはカプセル化がうまくいっていない例、

内部的にはクラスのふるまいに激甚な影響を与えるような重大なメンバ変数の追加が
後から必要になるというのはマズーな設計の例、
2017/10/11(水) 07:26:23.14ID:pdXZ47r80
フォークは低速な外部記憶からプログラムコードを新たにロードする手間が無い分高速な可能性が微レ存、
フォーク先とフォーク元でコードが共有されるためメモリ使用効率も多少UP、
あとサーバとクライアントの関係にある処理を(無理矢理)1本のプログラムとして書けるので
開発環境のリソース自体厳しく制限されていた昔はややうれしかったのかも知れん、、
2017/10/11(水) 07:54:56.70ID:pdXZ47r80
ていうか根本的な疑問として
CPUが低速であるとわかっていながら応答速度の要求があるタスクの一環に
プロセスの起動を含めるのってどうなんじゃ…
(プロセスやスレッドの起動は低廉なOSでは一般にリアルタイム性が全く最強度で担保されない
応答速度の要求が見積もれていなかったんだとすると極めてご愁傷様な話…
30デフォルトの名無しさん (ワッチョイ 0db3-XSap)
垢版 |
2017/10/11(水) 20:57:32.43ID:gwIT2xqO0
%%%%4NEL%%%%
000-SAV-&1.0888214%ML<\47MBL%0.2\MSSSS4.213>
1.8882/%B/%SB/<\2/7BL\%\%B!B%47L%Si72B>%10.2%\
002%\B%===>>>52.B<\rbc/2.8>>\7B<<\7LB>>\72S\<%\42%><\br>001BYON$\%7L2%3.33GHz>>>2.3GHz<\br>
41.B%LB%"<<%11.6$%><<\86.1B>>2LB>"B???S3>>71$-?>6%<\br>
082@<\7L@@<\br>
\LOOP>0<1Entra
2017/10/11(水) 22:47:02.58ID:pdXZ47r80
つかだいたいやるべきこと:
1. プログラムを全般的に速くする
2. (今から可能ならば)要求元とハンドシェークして必要なだけ待ってもらうしくみにする
3. 間に合わせたい処理の優先度を間に合っている処理より上げる
 (できればワーストケースでの応答時間の上限を担保する

>>20
sleepしてもスレッドコンテキストが切り替わらないOSというのはさすがに都市伝説なんじゃ…
2017/10/12(木) 05:46:12.53ID:4g8heiq80
ハンドシェイカー?時間の支配者?
2017/10/12(木) 07:21:15.63ID:K6ixfN2F0
訂正
 ×: プログラムを全般的に速くする
 ●: プログラムのボトルネック箇所を探して速くする
この場合プロセスの起動がボトルネックなのはまちがいなさげなのでそこを速くなるように修正汁、
2017/10/12(木) 09:09:50.72ID:VRKsQXfP0
汁?
35デフォルトの名無しさん (ワッチョイ 0b32-MWTH)
垢版 |
2017/10/12(木) 11:20:59.76ID:PQ1d1y2O0
汁=しろ
2ch地方の方言たい
2017/10/12(木) 12:07:42.25ID:GDIRJBKR0
汁を知らないのにも今時汁を見られたのにも戸惑う
2017/10/12(木) 13:46:59.50ID:CaCBhzNq0
cURLでググったらlibcurlってのがある。こっち使えばすべて解決する話じゃないの。
そもそもC++スレなのにlib使わずコマンド経由する理由が謎。
38デフォルトの名無しさん (ガックシ 06eb-HijE)
垢版 |
2017/10/12(木) 14:05:01.65ID:OhN0e73F6
ウンコの画像を生成するプログラムの作り方を教えて下さい
2017/10/12(木) 14:27:08.43ID:loBt1/dEd
>>38
板違い。CG板へ行け。
40デフォルトの名無しさん (ガックシ 06eb-HijE)
垢版 |
2017/10/12(木) 14:29:18.75ID:OhN0e73F6
お願いします!
2017/10/12(木) 14:44:27.75ID:loBt1/dEd
MMD、Blender、メタセコイアなど好きなヤツを使ってオブジェクトを三次元モデリングしろ。
ボーンを設定して、思ったとおりに変形できるようにしろ。
レンダリングして、画像として保存しろ。
42デフォルトの名無しさん (ガックシ 06eb-HijE)
垢版 |
2017/10/12(木) 14:45:58.16ID:OhN0e73F6
線を引いて多様なウンコ画像を生成するプログラムお願いします!
2017/10/12(木) 14:49:53.72ID:loBt1/dEd
基本オブジェクトをいくつか作れ。
基本オブジェクトを変形し、組み合わせれば、求める画像がレンダリングできる。
重力とボーンを考慮すれば自然な形になる。
2017/10/12(木) 14:52:00.26ID:y2YbOREJ0
AIがウンコ画像を識別できるなら、逆にウンコ画像を生成することもできるのではないか?
これを応用するとエロ画像を識別できるAIにエロ画像を生成させることもできるのでは?
2017/10/12(木) 16:00:49.56ID:Q2Fs2fOZd
まずは、MMD、Blender、メタセコイアのどれかを選んでダウンロード&インストールしろ。
2017/10/12(木) 19:02:41.71ID:eq5Al9lp0
>ボーンを設定して、思ったとおりに変形
要らんだろ・・・・w
アラレちゃんにつんつんでもさせるのかよ
2017/10/12(木) 21:58:15.37ID:9n97WZ1N0
cURLの起動云々の話に答えてくれた人ありがとう

応答速度についてはめちゃくちゃ遅いってレベルにならなければ問題なく
プロセスを立ち上げるような処理を入れても問題ないとの判断
極端な話10秒で終わっていたのが20秒になりましたぐらいなら問題なく、これが600秒かかりますとかなら問題あった

実際にプロセスを立ち上げてみて処理させてみたけど
CPUの食い合いがなければこの問題は解決できていると考えている

処理についてsleep入れるのは無理そうってレスしたけども
ソースコードを追ってみたらpollなどではなくwhile&usleepでの待機が存在していて
CPU喰ってたからこいつをちゃんと制御すれば問題なさそうってなりました
考えてくれた人ありがとう


別案件なんだけど何か良い実装方法がないか相談させてほしい
2017/10/12(木) 22:19:04.32ID:BE/Y4M/40
>while&usleep

時間の掛かる、I/O で、busy wait する奴って、素人だろ
2017/10/12(木) 22:24:29.13ID:9n97WZ1N0
1. PCA→PCBへのインストールで新規にcURLの実行形式ファイルを入れることになった
2. インストールが完了して再起動をしたら今後はcURLをsystem関数で実行して通信する

この状況下でダウングレードを試みようと考えた時に

3. PCA→PCBへのダウングレード(インストール)をcURLを用いてする
4. インストールが完了して再起動をしたら今後は独自プロトコルでの通信に戻る

こういう状況になった。
その時に、cURLを削除するタイミングが見付からなくて今困っている。

3を実行したときに判断しようとしたのだけどダウングレードだと判断するに至る材料がない。
ファイルを一個ずつ指定して送信して・・・の繰り返しだからリストにcURLがあるかないかも判断できずってなっている
2017/10/12(木) 22:25:11.03ID:9n97WZ1N0
書いてて気づいたけどこれC++の話じゃないって
もうスレチだと気づいたので無視してください

スレ汚しすまん
2017/10/13(金) 05:33:30.13ID:SZtyoNBi0
>>48
なるほろ
優先度の低いスレッドのビジーループは必ずしも悪ではないと思っていたが
低速なI/O命令を含むビジーループだと応答性能のドブ捨て度が増すのか、
52デフォルトの名無しさん (ワッチョイ 0b3f-MWTH)
垢版 |
2017/10/13(金) 06:42:57.49ID:/fw1jTt60
usleepしてるんなら優先度関係ないだろ
誰だ変なこと言ってるのは
2017/10/13(金) 07:21:38.02ID:JHJOvcP00
ネット回線なんか、秒の単位だから、busy wait の範囲を超えてる

busy wait は、せいぜい、1ms 以下とか、
マイコン・リアルタイムOS での話
54デフォルトの名無しさん (ワッチョイ 0b3f-MWTH)
垢版 |
2017/10/13(金) 10:38:57.55ID:/fw1jTt60
もしかしてusleepがビジーウエイトで実装されているとでも思っているのか
2017/10/13(金) 10:41:47.57ID:JHJOvcP00
CPU 使用率が、100% になってたんじゃないのか?
2017/10/13(金) 22:27:44.28ID:SZtyoNBi0
>>52
あるわ;
優先度が高いスレッドにビジーループされるとそいつがsleepしてくれる間隔が
全スレッドの応答時間の下限になってしまう
優先度が低いスレッドのビジーループならsleepを待たずに割り込めるからそこまで甚大にならない

ただしI/O命令があってそいつが数百マイクロ棒かかると
より高いスレッドであってもワーストケースの応答時間が数百マイクロ棒に劣化する
2017/10/13(金) 22:29:57.37ID:SZtyoNBi0
usleepは普通電気が無駄なのでhaltでもしてハードウェアに割り込みを待たせるが
マルチコア対応OSやったら気分次第でスピンロックでビージループすることもあるかも試練、
2017/10/13(金) 22:46:36.70ID:SZtyoNBi0
スマン
>usleepは普通電気が無駄なのでhaltでもして
というのは他に実行権待ちのスレッドが無かった場合の話ェ、
59デフォルトの名無しさん (ワッチョイ 8b80-hLkI)
垢版 |
2017/10/13(金) 23:08:17.12ID:JHJOvcP00
OS は、たぶん優先度を上下させるから、要注意。
優先度の低いスレッドでも、カーネルモードに入ると、優先度を上げるのじゃ?

優先度の低いスレッドのカーネルモードが、
優先度の高いスレッドのユーザーモードよりも、優先されるかも?

ただ、CPU 使用率が、100% と表示されていても、
本当は、CPUを使っていない場合もあるとか、聞いた事もある
2017/10/14(土) 02:15:22.32ID:hYPsSpip0
ウニファイドコールシンタックスはまだか!?
6152 (ワッチョイ 0bf0-MWTH)
垢版 |
2017/10/14(土) 07:10:59.60ID:F19RwFTi0
>>56
おまえさん、やっぱり前提がおかしいな

> 優先度が高いスレッドにビジーループされると
そんな話してねえぞ
usleepしてるんならと言ったろ
なんでビジーループが出てくるんだよ
2017/10/14(土) 07:17:25.54ID:nAGT83AF0
>>61
知らん国語の苦情なら>>48に家、
2017/10/15(日) 15:18:57.35ID:6+blsnLXd
ftpサーバを立てられないからプログラミングまで進まない悲しい
530エラーってなんでえええ
IIS使いにくい
2017/10/15(日) 15:51:56.38ID:NUNtAlCN0
俺もIISでFTPSサーバ立てられなくて困ってるわ
IIS思った以上に使いにくい

IISでオレオレ証明書を作成して
FTPS通信をcURLで確立したいだけなのに
本当にできるのだろうか
2017/10/15(日) 20:46:54.60ID:jTAoV9hu0
>>63,64
まあそういう話は適切なスレに行ってしてくるといいぞ
2017/10/15(日) 20:50:15.37ID:3VVV/TO4d
セキュリティソフトやファイアウォールが通信の邪魔をしている場合があるから、気を付けな。
2017/10/15(日) 21:16:20.68ID:TMBfPksM0
xamppでは出来ないんだっけ
68デフォルトの名無しさん (ワッチョイ 13d2-NIAW)
垢版 |
2017/10/15(日) 21:45:19.70ID:bPqYmEmS0
なんか難しい設定あったかな
SFTPできないならありそうだが
69デフォルトの名無しさん (ワッチョイ d108-MWTH)
垢版 |
2017/10/15(日) 21:49:59.50ID:DZC0OlhV0
>>66
そういう実験はまずVMでやれ、だよな
完全に無防備なら本来どうなっていたという話からクリアして
セキュリティの入った環境で引っかかった場合に切り分けをしながら、と
2017/10/15(日) 23:00:46.02ID:9R+c2v2L0
usleepの実装ってどんな感じ? どれくらいのμ秒の精度出んの?
ループ中に頻繁に読んでいいものなのか?
2017/10/15(日) 23:29:48.88ID:lsjR8/6b0
色々あるでしょ。
CPUが時計対応ならそっち見るだろうし、最悪ビジーループ。
不安ならchronoで寝るとかもあるぞ。
2017/10/15(日) 23:39:50.79ID:9R+c2v2L0
ググると最低4msとか出てくるな。MSみたいに最初からミリ秒単位にしとけば変な誤用されないものを。
2017/10/16(月) 12:13:18.90ID:iBTaJQF10
ガベージコレクションがないのに、安全なオブジェクト指向プログラミングなんてできるんですか?
74デフォルトの名無しさん (ワッチョイ 197f-BSx0)
垢版 |
2017/10/16(月) 12:22:08.74ID:VYCnmYA70
デ、デストラクタがあるから
2017/10/16(月) 12:25:47.42ID:CHd6usgT0
ガーベージコレクションも含めて実装するのが真のC++グラマーやでアマチャン
2017/10/16(月) 12:40:47.29ID:Ou6sbmAQM
GC付きスマポ、誰か作らんかね。
2017/10/16(月) 14:41:14.09ID:cwpW48EL0
D言語「俺を使えばいいじゃない?」
2017/10/16(月) 20:49:20.76ID:EBMdtAZpM
cli「もしかして俺の時代?」
2017/10/16(月) 20:54:28.42ID:D6Ozm2TBM
>>76
誰が使うんだよ?
2017/10/16(月) 22:26:22.71ID:uaY9uFi30
>>73
RAIIを徹底するのがC++流リソース管理法
いつ走るかわからないGCなんかよりずっとcontrollable
2017/10/16(月) 23:19:12.53ID:7Byc8Q4r0
GC要求が発生する前にプロセスが完了すりゃいいだけだろ
2017/10/17(火) 00:26:06.58ID:hVetZd8l0
最近は異常なほど高級言語志向が強いな。
2017/10/17(火) 06:56:31.57ID:BJIvhub9M
>>81
それGC要らんだろ w
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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