X



C++相談室 part132
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ (ワッチョイ faeb-wbjw)
垢版 |
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
0003デフォルトの名無しさん (ワッチョイ fd79-zkbM)
垢版 |
2017/10/10(火) 00:17:51.84ID:UbDU2trc0
>>1
0007デフォルトの名無しさん (ワッチョイ dacf-lNhP)
垢版 |
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>
後死ね。

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

---- テンプレ ここまで ----
0010デフォルトの名無しさん (ブーイモ MMfa-0mrS)
垢版 |
2017/10/10(火) 15:40:18.46ID:NgeFZ2kOM
質問がふわふわし過ぎ
そんなんじゃまともな回答は無理

個人的には
メンバをひとつ追加する程度で
破綻のリスクが増えるというなら
それは元々破綻していて
表面化していないだけだろうと思うが
0012片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)
垢版 |
2017/10/10(火) 16:49:55.22ID:RmsAElXwd
>>11
メンバー変数を増やすと、構造体のサイズが増大する。また、変数の追加する場所によっては、メンバーの相対的な位置が変化する可能性がある。
よって、その構造体のバイナリーインターフェースに依存するプログラムは死亡する可能性がある。
0013片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)
垢版 |
2017/10/10(火) 17:03:33.96ID:RmsAElXwd
例えば、構造体データをバイナリーとしてファイルに出力していたら、サイズの増えた構造体では正しく読み取れない可能性がある。
構造体のメンバーの相対的位置が変化したら、古い構造体を使っている他のプログラムとは相性が悪くなる。
0015はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ae6f-XSap)
垢版 |
2017/10/10(火) 20:42:09.59ID:ISsQMV5w0
>>14
たまに半端な位置に「予約」とか説明されてるメンバがあったりするよね。
あれはバイナリサイズが変わると困るような理由があるからなんかなぁ。
まあ、たいした理由もなくやっちゃって互換性ゆえに変えられなくなったとかだろうけど。
0018デフォルトの名無しさん (ワッチョイ 6e8a-v8iM)
垢版 |
2017/10/10(火) 23:50:05.54ID:4EEs5NsC0
cURLを限りなくスペックの低い組み込み機器に入れようとしてるところで問題が起きました

・処理能力が低い

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

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

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

上は常に通信をしているためにsleepを挟むことはできず
下のプログラミングベースについてもクロスコンパイルの問題でなぜか上手く行かない
これ以外の方法で対処方法ってありますか?
0021片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)
垢版 |
2017/10/11(水) 00:06:14.17ID:qOpcxgfAd
スペックが低すぎると、ANSI Cなどの規格に準拠してない恐れがある。
マシンとコンパイラーのマニュアルを確認して、準拠状況を確認しろ。
0024はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ae6f-XSap)
垢版 |
2017/10/11(水) 02:18:21.03ID:xVJHolx50
この件に関しては >>19 の疑問が当然だなぁ。
クロスビルドでこの手の問題がありがちなのは、
ライブラリのサーチパスとかかな。
ライブラリが見つからんとかメッセージ出てないかね?
0026デフォルトの名無しさん (ワッチョイ 6e8a-v8iM)
垢版 |
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でこれ以上増えるとさらに遅くなると思ってる…
0027デフォルトの名無しさん (ワッチョイ dabd-mvC5)
垢版 |
2017/10/11(水) 07:22:11.99ID:pdXZ47r80
メンバ変数が1個増えたぐらいで崩壊するのは
対外的にはカプセル化がうまくいっていない例、

内部的にはクラスのふるまいに激甚な影響を与えるような重大なメンバ変数の追加が
後から必要になるというのはマズーな設計の例、
0028デフォルトの名無しさん (ワッチョイ dabd-mvC5)
垢版 |
2017/10/11(水) 07:26:23.14ID:pdXZ47r80
フォークは低速な外部記憶からプログラムコードを新たにロードする手間が無い分高速な可能性が微レ存、
フォーク先とフォーク元でコードが共有されるためメモリ使用効率も多少UP、
あとサーバとクライアントの関係にある処理を(無理矢理)1本のプログラムとして書けるので
開発環境のリソース自体厳しく制限されていた昔はややうれしかったのかも知れん、、
0029デフォルトの名無しさん (ワッチョイ dabd-mvC5)
垢版 |
2017/10/11(水) 07:54:56.70ID:pdXZ47r80
ていうか根本的な疑問として
CPUが低速であるとわかっていながら応答速度の要求があるタスクの一環に
プロセスの起動を含めるのってどうなんじゃ…
(プロセスやスレッドの起動は低廉なOSでは一般にリアルタイム性が全く最強度で担保されない
応答速度の要求が見積もれていなかったんだとすると極めてご愁傷様な話…
0030デフォルトの名無しさん (ワッチョイ 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
0031デフォルトの名無しさん (ワッチョイ dabd-mvC5)
垢版 |
2017/10/11(水) 22:47:02.58ID:pdXZ47r80
つかだいたいやるべきこと:
1. プログラムを全般的に速くする
2. (今から可能ならば)要求元とハンドシェークして必要なだけ待ってもらうしくみにする
3. 間に合わせたい処理の優先度を間に合っている処理より上げる
 (できればワーストケースでの応答時間の上限を担保する

>>20
sleepしてもスレッドコンテキストが切り替わらないOSというのはさすがに都市伝説なんじゃ…
0033デフォルトの名無しさん (ワッチョイ 13bd-ZX73)
垢版 |
2017/10/12(木) 07:21:15.63ID:K6ixfN2F0
訂正
 ×: プログラムを全般的に速くする
 ●: プログラムのボトルネック箇所を探して速くする
この場合プロセスの起動がボトルネックなのはまちがいなさげなのでそこを速くなるように修正汁、
0035デフォルトの名無しさん (ワッチョイ 0b32-MWTH)
垢版 |
2017/10/12(木) 11:20:59.76ID:PQ1d1y2O0
汁=しろ
2ch地方の方言たい
0038デフォルトの名無しさん (ガックシ 06eb-HijE)
垢版 |
2017/10/12(木) 14:05:01.65ID:OhN0e73F6
ウンコの画像を生成するプログラムの作り方を教えて下さい
0040デフォルトの名無しさん (ガックシ 06eb-HijE)
垢版 |
2017/10/12(木) 14:29:18.75ID:OhN0e73F6
お願いします!
0041片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-WP5G)
垢版 |
2017/10/12(木) 14:44:27.75ID:loBt1/dEd
MMD、Blender、メタセコイアなど好きなヤツを使ってオブジェクトを三次元モデリングしろ。
ボーンを設定して、思ったとおりに変形できるようにしろ。
レンダリングして、画像として保存しろ。
0042デフォルトの名無しさん (ガックシ 06eb-HijE)
垢版 |
2017/10/12(木) 14:45:58.16ID:OhN0e73F6
線を引いて多様なウンコ画像を生成するプログラムお願いします!
0043片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-WP5G)
垢版 |
2017/10/12(木) 14:49:53.72ID:loBt1/dEd
基本オブジェクトをいくつか作れ。
基本オブジェクトを変形し、組み合わせれば、求める画像がレンダリングできる。
重力とボーンを考慮すれば自然な形になる。
0044デフォルトの名無しさん (ワッチョイ b3eb-qUyi)
垢版 |
2017/10/12(木) 14:52:00.26ID:y2YbOREJ0
AIがウンコ画像を識別できるなら、逆にウンコ画像を生成することもできるのではないか?
これを応用するとエロ画像を識別できるAIにエロ画像を生成させることもできるのでは?
0047デフォルトの名無しさん (ワッチョイ fb8a-ECK6)
垢版 |
2017/10/12(木) 21:58:15.37ID:9n97WZ1N0
cURLの起動云々の話に答えてくれた人ありがとう

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

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

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


別案件なんだけど何か良い実装方法がないか相談させてほしい
0049デフォルトの名無しさん (ワッチョイ fb8a-ECK6)
垢版 |
2017/10/12(木) 22:24:29.13ID:9n97WZ1N0
1. PCA→PCBへのインストールで新規にcURLの実行形式ファイルを入れることになった
2. インストールが完了して再起動をしたら今後はcURLをsystem関数で実行して通信する

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

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

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

3を実行したときに判断しようとしたのだけどダウングレードだと判断するに至る材料がない。
ファイルを一個ずつ指定して送信して・・・の繰り返しだからリストにcURLがあるかないかも判断できずってなっている
0052デフォルトの名無しさん (ワッチョイ 0b3f-MWTH)
垢版 |
2017/10/13(金) 06:42:57.49ID:/fw1jTt60
usleepしてるんなら優先度関係ないだろ
誰だ変なこと言ってるのは
0054デフォルトの名無しさん (ワッチョイ 0b3f-MWTH)
垢版 |
2017/10/13(金) 10:38:57.55ID:/fw1jTt60
もしかしてusleepがビジーウエイトで実装されているとでも思っているのか
0056デフォルトの名無しさん (ワッチョイ 13bd-ZX73)
垢版 |
2017/10/13(金) 22:27:44.28ID:SZtyoNBi0
>>52
あるわ;
優先度が高いスレッドにビジーループされるとそいつがsleepしてくれる間隔が
全スレッドの応答時間の下限になってしまう
優先度が低いスレッドのビジーループならsleepを待たずに割り込めるからそこまで甚大にならない

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

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

ただ、CPU 使用率が、100% と表示されていても、
本当は、CPUを使っていない場合もあるとか、聞いた事もある
006152 (ワッチョイ 0bf0-MWTH)
垢版 |
2017/10/14(土) 07:10:59.60ID:F19RwFTi0
>>56
おまえさん、やっぱり前提がおかしいな

> 優先度が高いスレッドにビジーループされると
そんな話してねえぞ
usleepしてるんならと言ったろ
なんでビジーループが出てくるんだよ
0064デフォルトの名無しさん (ワッチョイ fb8a-ECK6)
垢版 |
2017/10/15(日) 15:51:56.38ID:NUNtAlCN0
俺もIISでFTPSサーバ立てられなくて困ってるわ
IIS思った以上に使いにくい

IISでオレオレ証明書を作成して
FTPS通信をcURLで確立したいだけなのに
本当にできるのだろうか
0068デフォルトの名無しさん (ワッチョイ 13d2-NIAW)
垢版 |
2017/10/15(日) 21:45:19.70ID:bPqYmEmS0
なんか難しい設定あったかな
SFTPできないならありそうだが
0069デフォルトの名無しさん (ワッチョイ d108-MWTH)
垢版 |
2017/10/15(日) 21:49:59.50ID:DZC0OlhV0
>>66
そういう実験はまずVMでやれ、だよな
完全に無防備なら本来どうなっていたという話からクリアして
セキュリティの入った環境で引っかかった場合に切り分けをしながら、と
0074デフォルトの名無しさん (ワッチョイ 197f-BSx0)
垢版 |
2017/10/16(月) 12:22:08.74ID:VYCnmYA70
デ、デストラクタがあるから
0085デフォルトの名無しさん (ワッチョイ 8bab-EwbT)
垢版 |
2017/10/18(水) 08:44:17.01ID:qJuCX/Qy0
C++を最近学び始めた者なんですが
ファイルへの保存で質問があるんですが良いでしょうか
テキストに保存するのと、バイナリに保存するので
文字列を保存するとバイナリが僅かに小さくなるんですが
vectorを保存すると逆にバイナリのほうがサイズが大きくなるのは
普通のことなんでしょうか?
0086デフォルトの名無しさん (ワッチョイ 8bab-EwbT)
垢版 |
2017/10/18(水) 08:46:30.49ID:qJuCX/Qy0
vectorの二次元配列を、forの二重ループで
テキストへは outputfile << data[i][j] << "\t";
バイナリへは outputfile.write((const char*)&data[i][j], sizeof(data[i][j]));
で書き込んでみてるのですが・・・・・・
100×100の配列を書き込むと
テキストが29キロバイト、バイナリが40キロバイトに
配列を大きくすればするほどバイナリが大きくなってしまいます
0089デフォルトの名無しさん (ワッチョイ 138a-13gS)
垢版 |
2017/10/18(水) 09:41:02.33ID:MOIHjDBn0
>>86
どんなデータかによる。intを保存しようとしててデータが全部一桁ならバイナリの方が大きくなることもあるかもしれない。

まずキャストの使い方が間違ってるので、さっくり消してみよう。
次に読み取り部分を作って正常に読み取れるか見てみよう。
0090デフォルトの名無しさん (ワッチョイ 912d-0Wb2)
垢版 |
2017/10/18(水) 09:45:31.83ID:4annDJqp0
>>85
dataの型が解ればもう少し推測できるけど
char data[100][100][MAX_STR_LEN];
だとして
data[0][0] = "data\0qwe"; // "qwe"はゴミ
みたいにnull terminated後の不要なゴミも書き込んでるんじゃない?
バイナリエディタでバイナリファイル覗いてみれば解るかと
サイズから推測するとMAX_STR_LENは4かな
0092デフォルトの名無しさん (ブーイモ MM0d-qY8G)
垢版 |
2017/10/18(水) 11:54:38.42ID:hNmHHI30M
>>91
いや、私の誤りでした、だろ
何が間違ってるほどじゃないだ
日本語間違えるなよ

>>86
出力したテキストファイルの中身は?何か差分は無いの?
少ない情報出してここで聞くより
見た方がよっぽどわかるだろ
0093デフォルトの名無しさん (ワッチョイ 8bab-EwbT)
垢版 |
2017/10/18(水) 11:56:58.03ID:qJuCX/Qy0
レス有難うございます。dataはintのvector二次元配列で
int a=100;
int b=100;
vector< vector<int> > data(a, vector<int>(b));
このdataに、forで
data[i][j] = rand() % 100;
の数字をいれている配列なんです
バイナリ保存したデータを、FavBinEditというものでみてみると
数字と数字のあいだに間隔があいてるので
これがサイズが大きくなってる理由なのかと思うんですが
0094デフォルトの名無しさん (ブーイモ MM0d-uYMh)
垢版 |
2017/10/18(水) 12:47:08.44ID:J7UI6pACM
>>93
int型の100*100配列なら約40K byteなんだから、バイナリファイルは正しいと思うよ。
で、テキストも間違っているとは言いきれない。
例えば一桁の数字が多いなら、バイナリファイルより小さくなるよね?

サイズの違いはあって当然だと思うけど。
0095デフォルトの名無しさん (ワッチョイ 8bab-EwbT)
垢版 |
2017/10/18(水) 13:00:53.38ID:qJuCX/Qy0
そういうものなのですか
ネット上に、バイナリに保存するとサイズが小さくなる
という話が多いのでそう思い込んでました
自分には関係無いような、複雑なデータを扱うと小さくなるのかな
0096デフォルトの名無しさん (ワッチョイ 912d-0Wb2)
垢版 |
2017/10/18(水) 13:06:46.43ID:4annDJqp0
そういうもんですね 自分もintなら納得です

「rand() % 100」なら文字列にしたとき"0"(=0x30)から"99"(=0x3939)と2byteで収まり
"\t"を付けても 常に4byte(=sizeof(int) システム依存)より小さいですから
バイナリだと0を0x00000000, 99を0x63000000(リトルエンディアン)で保存してます

試しに「rand() % 100」を「10000」とか
"文字列にしたとき'\t'も含めて4文字を越える大きさ"にすれば
サイズが逆転するのが観察できるはずです

・扱う数字が小さいからテキストの方が短くて済んでる
・バイナリなら数字が大きく(当然intの最大値を越えないこと)なってもサイズが一定で済む

余談ながら
バイナリで保存するならバイトオーダー(エンディアン)には注意しとかないと
万が一エンディアンの違うシステムで動作する必要があるときに死ねます
0097デフォルトの名無しさん (アークセー Sx45-jnAP)
垢版 |
2017/10/18(水) 16:31:39.68ID:8P8HMOssx
質問です。
とあるクラスのヘッダーに定義している文字列変数(CString)の文字列だけを変更し、ビルドしても、変更が反映されないのですがこれは仕様でしょうか?リビルドすると反映されます。
環境はVisualStudio2015 VC++です。
0100デフォルトの名無しさん (ブーイモ MM71-v1IO)
垢版 |
2017/10/19(木) 12:49:02.40ID:LAmWAPnYM
>>95
テキスト形式は、装飾次第で肥大化しやすいってだけだよ。
カンマやタブや改行も装飾の一部。
一桁の数字でも、スペース等で桁合わせしたら、それだけで肥大化するしね。

実際のところは、どういうフォーマットで出力してるか次第だけど。
最小桁で出力していて、rand 出力が正規分布に従うと考えれば、計算上約29k byteになるよ。
■ このスレッドは過去ログ倉庫に格納されています

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