- 1 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 04:55:24.99 ]
- C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part94 toro.2ch.net/test/read.cgi/tech/1329512856/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.78【環境依存OK】 toro.2ch.net/test/read.cgi/tech/1331894668/ ■長いソースを貼るときはここへ。■ codepad.org/ ideone.com/
- 198 名前:デフォルトの名無しさん mailto:sage [2012/05/20(日) 20:37:06.35 ]
- >>194
実際速いから。あとC++じゃベクトル命令(SSEの類ではない) まともに自動で使えないから。
- 199 名前:デフォルトの名無しさん mailto:sage [2012/05/20(日) 20:45:37.65 ]
- pascal の配列演算がなぜFORTRAN と並ぶに達せなかったのかに疑問が沸く
- 200 名前:デフォルトの名無しさん mailto:sage [2012/05/20(日) 20:57:54.26 ]
- >>195
C++には無いよ。C++11なら無視されるらしい。
- 201 名前:デフォルトの名無しさん mailto:sage [2012/05/20(日) 21:34:30.81 ]
- 金が足りなかったんだろう
- 202 名前:デフォルトの名無しさん mailto:sage [2012/05/20(日) 21:48:23.26 ]
- >>198
vector<double> x,y,z; z=x*y; 的なこと?たしかにRとかで使うけどなれると便利だよな。 Pascalにもあるの?
- 203 名前:デフォルトの名無しさん mailto:sage [2012/05/20(日) 22:14:52.36 ]
- >>201
コンパイラでそういうの早くしようとしたら、どういう頑張りが必要なの? まったく想像がつかないんだけど命令手書きとか?
- 204 名前:デフォルトの名無しさん mailto:sage [2012/05/20(日) 22:19:12.45 ]
- >>202
www.ss.isc.tohoku.ac.jp/refer/pdf_data/v36-1p17-54.pdf www.ss.isc.tohoku.ac.jp/refer/pdf_data/v35-3p21-39.pdf この辺の話にでてくるベクトル命令
- 205 名前:デフォルトの名無しさん mailto:sage [2012/05/20(日) 22:25:08.49 ]
- >>202
B(1:99) = A(2:100) こんなんとか。 Fortranならある範囲から、ある範囲に対して 演算を行える専用構文が存在するがCやC++には 存在しない。独自の拡張か、環境依存の関数を 使う必要が有る。
- 206 名前:デフォルトの名無しさん mailto:sage [2012/05/20(日) 22:30:31.09 ]
- ベクトル回路に乗せやすいように配列データを並べて
固定回数の繰返し構文を見つけて専用命令を充てる。
- 207 名前:デフォルトの名無しさん mailto:sage [2012/05/20(日) 22:55:46.78 ]
- C++もstd::valarrayを擬似クラス化して最適化できる
ようにすりゃいいんだけどな。演算子のオーバーロードとか 通常時は、演算毎にループして、最適化がかかった場合は Expression Templateみたいに一つのループで一つの要素に対する 演算をすべて実行したりとかさ。
- 208 名前:デフォルトの名無しさん mailto:sage [2012/05/20(日) 22:58:09.26 ]
- >>203
基礎研究レベルからの積み重ね以外にないだろう 商用のCやFortranのコンパイラがやってる融合変換や自動ベクトル化とか命令の合成とかは全部その上に成り立つもの 別に言語の仕様が高速化に向いてるからだとかいうものじゃない
- 209 名前:デフォルトの名無しさん mailto:sage [2012/05/20(日) 23:06:09.20 ]
- >>208
配列演算ができるのと出来無いのじゃ差が大きいよ GpGPU分野でもFortranがそのまま移植され始めたし
- 210 名前:デフォルトの名無しさん mailto:sage [2012/05/20(日) 23:24:38.00 ]
- >>198
ここで言うベクトル命令ってSSEの類じゃないってどういうこと? インテル系以外のプロセッサということなのか?
- 211 名前:デフォルトの名無しさん mailto:sage [2012/05/20(日) 23:26:50.52 ]
- このスレに貼られたリンク先をよく見てみましょう
- 212 名前:デフォルトの名無しさん mailto:sage [2012/05/20(日) 23:35:25.20 ]
- >>210
ここではベクトルプロセッサーのベクトル命令の事。 ベクトルプロセッサーの命令は、ループで回しながら xmm0みたいな固定長のレジスタを使って演算する わけじゃなく、演算命令に範囲と要素のサイズを 指定するだけ。構造がだいぶ違う。
- 213 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 00:35:17.00 ]
- >>212
なるほどよくわかった。ベクトル機向けだからか。 今だとCUDAに近い感じかな。
- 214 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 00:59:09.35 ]
- >>200
VCにはrestrictはないが__restrictという予約語でこっそりMS独自拡張されてる ヘルプ見てみ >>209 D&Eでも禿が「C++は演算分野でFORTRANと張りあうつもりはない」ってはっきり言ってるもんな でも実際使われてる事も確かだし速度が少し遅くても答えさえでりゃいいって奴がおおいんじゃ どうしてもいやならFORTRANをリンクして行と列を入れ替えれば済む話だし ベクトルって並列演算の事だと思うけどスーパーコンピュータはほとんどベクトル機だから(Power PCを 並列につないで使ったりしてるもんな)C/C++で同じ事をやろうとすればOpenMPか>>213のように GPUを使ったCUDAしかない しかしGPGPUは単精度という致命的な欠点があって倍精度専用のGPUも発売されているが これは気軽に買えるようなものではない
- 215 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 01:13:25.79 ]
- MS独自に拡張されてようとC++11には無い
- 216 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 01:16:42.78 ]
- ここC++11のスレじゃないんだけど
ちなみにC++03にもないです 俺が言ってるのはPCでrestrict使いたければVCかIntel C++(C99対応)を 買うしかないという事 スパコンも案外独自拡張されてそうだけどな あれだけ演算速度を重視されるんだから
- 217 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 01:22:04.90 ]
- あ、やっぱり
ベクトル型スーパーコンピュータのC/C++はrestrictを独自拡張してる物が多いようですね これがないとベクトルCPUやSIMDが使えないもんなあ それか素直にC99を使うか
- 218 名前:デフォルトの名無しさん [2012/05/21(月) 01:28:46.99 ]
- std::stringを継承させた
exstringというクラスを作ったのだけど std::stringのいろんなコンストラクタをそのまま継承クラスでも使う方法ってないの?
- 219 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 01:31:36.96 ]
- stringクラスに仮想デストラクタはあるのか?まずそれが一番大事
無いとdeleteの時にメモリリークするぞ 次にコンストラクタは継承されないから自分で書き直すしかない コピペしてそのまま呼び出せばいいのは初期化リストに入れれば良い
- 220 名前:デフォルトの名無しさん [2012/05/21(月) 01:33:12.86 ]
- ポータブルなisnanの実装って可能?
doubleのビットを全部見たらnanについて何が分かる?
- 221 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 01:34:33.68 ]
- >>219
std::stringにアップキャストしたポインタをdeleteしなきゃリークしねーだろ
- 222 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 01:35:11.83 ]
- ちなみにexstringをポインタ経由でなくてインスタンスとしてしか使わないのなら問題ないけどな
それからexstring自身のポインタ経由で使うか std::stringは「失敗した標準ライブラリ」だと良く言われる 理由は多量のコンストラクタに、整理されてない多量のメンバ関数 STLの前に作られたから仕方ないんだが string用に最適化されている事を期待して諦めているが
- 223 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 01:50:02.37 ]
- >>219
おまいバカだろ
- 224 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 01:56:35.44 ]
- >>223
馬鹿というなら具体的な対応策をお前が>>218に呈示してやれよ
- 225 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 02:52:59.24 ]
- 全然話は違うけどSTLPortのstd::ropeはどうなったん?
boostもC++11も見捨ててるみたいだけど、自然消滅?
- 226 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 04:21:31.83 ]
- >>220
IEE754でいいなら、ビットパターンでNaNを表現している。
- 227 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 04:27:55.75 ]
- std::stringじゃなくて
<boost/container/string.hpp> 使うのは?
- 228 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 04:43:06.94 ]
- >>227
本当だな それだとslistも入ってるし不要なstringのメンバ関数がバッサリ切り捨てられてる 全部STLでやれって事だよな
- 229 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 06:11:32.83 ]
- >>216
正式に規格になったから、一応C++11もこのスレに含まれるっぽいぞ。 数カ月前向こうでそういう議論があった。 今C++11スレは、次世代規格やC++11の対応状況とかそんなスレになってる。 つか過疎ってる。
- 230 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 08:41:00.31 ]
- >>217
自分で書けばいいじゃん。 俺はクリティカルになるところは自分でかく。 それ以外は、コンパイラ任せ。
- 231 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 09:11:46.86 ]
- ropeは現在では遅延評価がある言語でエディタ実装する用途以外に使い道無い
- 232 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 12:36:03.13 ]
- ベクトル演算なんて自前でループなんかしないでippあたりのライブラリ使うから
どうでも良い
- 233 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 19:17:30.82 ]
- メモリの断片化を防ぐために、OSが不定期にデータを移動させることがあるそうですが、
現在、これによる影響を考慮するようなプログラムはないと考えてよいでしょうか? 昔(WindowsNTより前?):物理メモリアドレス=プログラムが参照するアドレス →移動可能メモリを読み書きするにはロックが必要 今:物理メモリアドレスはOS管理の論理アドレステーブルで対応付けされ、プログラムからは常に固定のアドレス
- 234 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 19:31:11.61 ]
- どういうときに考慮する必要があるの?
断片化解消を阻止するプログラムでも作るつもりか?
- 235 名前:233 mailto:sage [2012/05/21(月) 19:36:58.90 ]
- >>234
DirectXにロックするAPIがあるんです。 現在はロックって必要ないはずですよね??
- 236 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 20:20:42.21 ]
- >>235
DMAとかでCPU以外からのアクセスがあるため、OSが勝手に移動すると困る
- 237 名前:233 mailto:sage [2012/05/21(月) 20:42:28.92 ]
- >>236
なるほど。 GPUから見た場合は論理テーブルみたいな仕組みがないので、 明示的に物理アドレスを固定しないといけないということなんですね。 ありがとうございました!!
- 238 名前:デフォルトの名無しさん mailto:sage [2012/05/22(火) 15:19:56.67 ]
- uプリフェックスってコンパイラで指定したソースコードの文字コードを
UTF-16に変換してconst char16_t*型の変数に代入するって意味ですよね? 例えばソースコードがエスジスならばエスジスをUTF-16にへんかんするってことですよね?
- 239 名前:デフォルトの名無しさん mailto:sage [2012/05/22(火) 20:57:41.81 ]
- だいたいあってるけど正確には違う
- 240 名前:デフォルトの名無しさん [2012/05/22(火) 22:39:22.14 ]
- struct X
{ char x; X( const X& o ) : x(1) {} X() : x(0) {} }; int _tmain(int argc, _TCHAR* argv[]) { X x; x = X(); return 0; } これ、コピーコンストラクタが呼ばれずにx.x != 1になってしまうんですが なぜだかわかりますか? Visual C++ 2010です。
- 241 名前:デフォルトの名無しさん mailto:sage [2012/05/22(火) 22:52:07.80 ]
- operator=が呼ばれてるからじゃないんけ
- 242 名前:デフォルトの名無しさん mailto:sage [2012/05/22(火) 22:54:31.43 ]
- 初期化と代入の区別はちゃんとつけよう!
- 243 名前:デフォルトの名無しさん mailto:sage [2012/05/22(火) 23:14:03.53 ]
- コピーじゃなくて代入だから呼ばれないよね(´・ω・`)
- 244 名前:デフォルトの名無しさん mailto:sage [2012/05/22(火) 23:25:39.40 ]
- >>240
operator=を書いてみ
- 245 名前: ◆QZaw55cn4c mailto:sage [2012/05/23(水) 03:17:06.92 ]
- >>240
codepad.org/YYHOycgY
- 246 名前:デフォルトの名無しさん mailto:sage [2012/05/23(水) 07:22:31.20 ]
- 同じ事を何度も言わなくてよろしい
- 247 名前:デフォルトの名無しさん mailto:sage [2012/05/23(水) 23:34:18.12 ]
- template部分特殊化で
int float doubleは同じ処理で string charは違う その他のいろんなクラスは汎用処理 ということをしたいとする int float doubleの同じ処理を3回書かないでプリプロセッサあたりで一回で書いてしまう方法ないでしょうか
- 248 名前:デフォルトの名無しさん mailto:sage [2012/05/23(水) 23:41:58.93 ]
- template<class Signature>
struct my_class{ ... }; // etc type template<class T> struct base_int_float_double{ ... }; // int or float or double template<> struct my_class<int> : public base_int_float_double<int>{}; template<> struct my_class<float> : public base_int_float_double<float>{}; template<> struct my_class<double> : public base_int_float_double<double>{}; これじゃいかんのか?
- 249 名前:デフォルトの名無しさん mailto:sage [2012/05/23(水) 23:47:57.51 ]
- >>248
ありがとう それでいけます
- 250 名前:デフォルトの名無しさん mailto:sage [2012/05/24(木) 03:41:09.75 ]
- 中身はintだけど型がintと違うものを作りたくて
struct exint ; public int {}; してみたらintはclassじゃないと怒られた。こんなものは作れないってことでいいの?
- 251 名前:デフォルトの名無しさん mailto:sage [2012/05/24(木) 04:04:31.20 ]
- >>250
D言語でおk
- 252 名前:デフォルトの名無しさん mailto:sage [2012/05/24(木) 04:49:36.72 ]
- オブジェクト指向もどきだから
何でもかんでもオブジェクトじゃないよ
- 253 名前:デフォルトの名無しさん mailto:sage [2012/05/24(木) 13:53:23.19 ]
- newしたクラスのコンストラクタで、自分のメンバ変数にさらにnewしてクラスのオブジェクトを持たしている時
一番上位のオブジェクトをdeleteしたらメンバ変数のnewしたオブジェクトも消えるでしょうか? つまり↓ newオブジェクト@->newオブジェクトA->xxxx ; と続いている時、newオブジェクト@をdeleteする この場合はnewオブジェクトAを削除したければ、そいつのデストラクタを呼ばないと駄目?
- 254 名前:デフォルトの名無しさん mailto:sage [2012/05/24(木) 13:58:59.65 ]
- >>253
newしたオブジェクトはスコープアウトしても消えることがないので、ライターの責任でdeleteする必要がある。 だから消えない。
- 255 名前:デフォルトの名無しさん mailto:sage [2012/05/24(木) 14:00:56.11 ]
- >>253
それはデストラクタに書くべき事でしょ newオブジェクトにもデストラクタを書いておけば全部呼んでくれる 継承してないし簡単
- 256 名前:デフォルトの名無しさん mailto:sage [2012/05/24(木) 14:12:45.06 ]
- 例えばこれはメモリリークしない
class Base { public: Base* bp; Base() : bp(new Base) { bp->bp = 0; } Base* pointer() { return bp; } ~Base() { delete bp; } }; int main() { Base b; Base* bp = b.pointer(); bp->bp = new Base; bp->bp->bp = new Base; bp->bp->bp->bp = new Base; }
- 257 名前:デフォルトの名無しさん mailto:sage [2012/05/24(木) 14:20:05.69 ]
- bpがpublicというのは格好悪いのでprivateにした
やはりメモリリークはない class Base { Base* bp; public: Base() : bp(new Base) { bp->bp = 0; } Base* pointer() { return bp->bp; } ~Base() { delete bp; } }; int main() { Base b; Base* bp = b.pointer(); bp = new Base; bp = bp->pointer(); bp = new Base; bp = bp->pointer(); bp = new Base; }
- 258 名前:デフォルトの名無しさん mailto:sage [2012/05/24(木) 14:26:34.15 ]
- >>253
newしたらdelete ideone.com/Q8DwX スマートポインタの方がいい ideone.com/2PugO ポインタの必要がなければ普通にメンバにした方がいい ideone.com/eepV0
- 259 名前:デフォルトの名無しさん mailto:sage [2012/05/24(木) 15:23:47.59 ]
- >>258
タメになるなぁ。 >>257 ダメになるなぁ。
- 260 名前:デフォルトの名無しさん mailto:sage [2012/05/24(木) 15:56:15.57 ]
- >>257
リーク以前にそれ無限ループじゃね?
- 261 名前:デフォルトの名無しさん mailto:sage [2012/05/24(木) 16:14:14.63 ]
- >>260
やってみて言ってんのか Base() : bp(new Base) { bp->bp = 0; } が何のために書いてあるのか分からないのか
- 262 名前:デフォルトの名無しさん mailto:sage [2012/05/24(木) 16:19:57.35 ]
- おれもコンストラクタが再起するように見えるけど。
開発環境入ってないから検証できないな。 で、Ideoneで試してみたら、ランタイムエラーだってさ。 ideone.com/ikpg0
- 263 名前:デフォルトの名無しさん mailto:sage [2012/05/24(木) 16:36:25.55 ]
- うん。スタックオーバーフローだから、実行するまでわかんない。VCとかだと何事も無く終了するw
- 264 名前:デフォルトの名無しさん mailto:sage [2012/05/24(木) 16:38:47.40 ]
- >>257
ループの件とは別に、 >>256はbp->bp->bpで連結してるけど >>257はBase::bpでなくmainのローカル変数書き換えてるだけなのでリークする やりたいことは分かるけどサンプルは盆ミス回避のため実際に実行するに限る ideone.com/pcKDy
- 265 名前:264 mailto:sage [2012/05/24(木) 16:41:37.05 ]
- >盆ミス
そしてこの凡ミスである
- 266 名前:デフォルトの名無しさん mailto:sage [2012/05/24(木) 17:00:14.45 ]
- >>261
やってみて言ってんのか
- 267 名前:260 mailto:sage [2012/05/24(木) 17:43:32.61 ]
- >>261
コンストラクタでのnewでまたコンストラクタを呼び出す <---- 無限ループ 試しに bp->bp=0; にブレークポイント仕掛けたけど、そこに到達する前にスタックオーバーフローした 見た瞬間に気が付くと思うんだけどなぁ
- 268 名前:デフォルトの名無しさん mailto:sage [2012/05/24(木) 18:47:57.48 ]
- 既に>259で答えが出てた。
- 269 名前:デフォルトの名無しさん mailto:sage [2012/05/24(木) 19:51:23.02 ]
- どう見ても永久ループです
ありがとうございました #include <iostream> class Base { Base* bp; public: Base(int i = 0) { std::cout << "Base() " << i << " time(s) called." << std::endl; bp = new Base(i + 1); bp->bp = 0; } Base** pointer() { return &bp->bp; } ~Base() { delete bp; } }; int main() { Base b; }
- 270 名前:240 [2012/05/24(木) 20:52:39.67 ]
- >>240 のお答えありがとうございました。こちらは理解出来ました。
ただもうひとつ、疑問があります。 このoperator=()が適用されないんですが なぜなのかさっぱりです。 というかこれは常識ですか? codepad.org/z5OlAQXL
- 271 名前:デフォルトの名無しさん mailto:sage [2012/05/24(木) 20:57:20.69 ]
- 暗黙のうちに作られるoperator=(const X<x0,x1>&)があるから。
普通のメンバ関数なのでテンプレートより優先。
- 272 名前:240 mailto:sage [2012/05/24(木) 21:04:15.42 ]
- そうなんですか・・
デバッガでトレースしても何も無いし 暗黙なんて止めて欲しい・・ ともあれ、おかげで対策方法もやっとわかりました。 どうもありがとうございます。
- 273 名前:デフォルトの名無しさん mailto:sage [2012/05/24(木) 23:25:58.77 ]
- Base() : bp(new Type()) {
} 初期化リストでnewするって無いよな スマポ使えとまでは言わんが、せめて 初期化リストはNULL初期化だわ 効率もスマポ使った時と変わらん Base():value1(NULL),value2(NULL) try { value1 = new Type(); value2 = new Type(); } catch(...) { delete value1; delete value2; }
- 274 名前:デフォルトの名無しさん mailto:sage [2012/05/24(木) 23:42:36.30 ]
- いやそこはスマポ使えよ
- 275 名前:デフォルトの名無しさん mailto:sage [2012/05/24(木) 23:43:59.04 ]
- NULLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
いや、俺はちゃんとnew_handler記述するよ。
- 276 名前:デフォルトの名無しさん mailto:sage [2012/05/24(木) 23:47:16.61 ]
- というかnewがこけるときって、どういう状態なんだろ?
もうガッタガタで、プロセス落とすしかないんじゃないの?
- 277 名前:デフォルトの名無しさん mailto:sage [2012/05/24(木) 23:55:28.25 ]
- >>276
Effective C++読んでみれ。 第三版はどうなってるか知らんが、第二版ではかなり最初のほうで出てくる話題。 メモリ不足への対策は初級クラスのプログラマでも必須の知識だってことなんだよ。 イメージできないなら、まだ初級プログラマになれてない。
- 278 名前:デフォルトの名無しさん mailto:sage [2012/05/24(木) 23:59:38.27 ]
- と、思っていま第三版の目次を確認したら後方に移動してたw
二版では2章7項だったが、三版では8章辺りの話題のようだ。
- 279 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 00:02:50.74 ]
- あ、オレ初級以下だわ
- 280 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 00:05:45.16 ]
- メモリが有限だってことさえわかれば自然と不足する状況なんて考えられるはずなのに、
それがわからないって言ってるやつは結局エラー処理をサボる理由が欲しいだけなんでしょ。
- 281 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 00:06:34.49 ]
- クラスに自分へのポインタを持ってそこにnewして入れるなら
再帰呼び出しになるから、引数を入れて深さがある程度になったら 止めるなどの工夫をしないとstd::bad__alloc例外が投げられるのは目に見えている
- 282 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 00:07:23.77 ]
- その前にスタックオーバーフローで止まるかハングしそうだけどね
処理系によってはスタックオーバーフローしても何も言わずにそのまま続行するから たちが悪い
- 283 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 00:20:57.76 ]
- new と スタックがどう関わるか詳しく聞きたいものだな
- 284 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 00:37:07.29 ]
- コンストラクタの再帰呼び出しの機構は特に規格に入ってないけど
普通の関数のCALLみたいな機構で実現されてる場合が多いみたいです だから先にスタックが逝くような感じ
- 285 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 00:56:04.36 ]
- ウェブ上で配信されているMJPEG形式のストリームを読み込んでメモリ上でパースしたいです。
どのような方針で書けばいいでしょうか。 よろしくお願いします。
- 286 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 01:01:57.44 ]
- とりあえず適当にバッファにとって切り取っていけばいいんじゃないでしょうか
- 287 名前:285 mailto:sage [2012/05/25(金) 01:36:52.37 ]
- ソケット作ってってことですか?
ストリーミング取得しやすくするライブラリでもあればいいのですが。 ちなみに対象のMJPEGの構造は把握しているので独自に解析するとして、今は自分の中に以下の3つの課題があります。 ・データをどうやって取ってくるか ・送られてくるMJPEGを具体的にどのようにバッファして解析してバッファをリリース&次のデータを取得すればいいのか ・マルチスレッドで他の処理と並行して実行させたいので、プロセス内でjpgのやり取りをしたいのですが、 例えばOpenCVを使った画像処理スレッドとjpgを取得するスレッドをどうやって連携させるのか
- 288 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 04:07:11.32 ]
- >>287
1. wget URL | お前のプログラム 2. read(stdin) 3. シングルで動いてから考えろ 煽りじゃなくて本気でリファレンス実装作ってからじゃないとデバッグ大変よ?
- 289 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 04:37:11.10 ]
- 大きな問題を小さく分割して1つひとつ実現するセンスが必要
- 290 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 06:01:17.57 ]
- >>275-276
new演算子の問題じゃなく、newに付けたコンストラクターが 例外を出した時が問題なんだけどな
- 291 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 06:24:09.31 ]
- >>275
new_handlerつかっててもコンストラクタでコケたらメモリーリークする メモリーリークだけなら即致命的な事態にならないが ファイルロックや排他など各種ロックが掛かりっぱなしになる
- 292 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 06:26:00.68 ]
- 言葉が足りなかった。
>ファイルロックや排他など各種ロックが掛かりっぱなしになる これは、ロックするタイプのオブジェクトをnewで確保していた場合な
- 293 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 07:32:03.94 ]
- だからスマポ使えよ
- 294 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 08:24:38.42 ]
- >>291
new_handler とメモリーリークは関係ないだろ。
- 295 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 09:28:57.73 ]
- スマポ使ったら負けだと思うんだ。(笑)
- 296 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 09:35:01.30 ]
- スマポこそ人類の英知だ
そうは思わんかね
- 297 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 09:46:28.44 ]
- >>295 けっこうよく居るな、こういうやつ。なんなんだろうな?
- 298 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 09:58:18.30 ]
- >>291-292
細かいアレだけど「コンストラクタが例外安全なコードになってなかったら」だろ?
|

|