1 名前:デフォルトの名無しさん [2011/09/15(木) 00:17:43.25 ] スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。 過去ログ 01 pc11.2ch.net/test/read.cgi/tech/1167476845/ 02 pc11.2ch.net/test/read.cgi/tech/1178503366/ 03 pc11.2ch.net/test/read.cgi/tech/1187521676/ 04 pc11.2ch.net/test/read.cgi/tech/1221633708/ 05 pc11.2ch.net/test/read.cgi/tech/1230516307/ 06 pc11.2ch.net/test/read.cgi/tech/1231564903/ 07 pc11.2ch.net/test/read.cgi/tech/1232983248/ 08 pc12.2ch.net/test/read.cgi/tech/1235921779/ 09 pc12.2ch.net/test/read.cgi/tech/1240022781/ 10 pc12.2ch.net/test/read.cgi/tech/1242300936/ 11 pc12.2ch.net/test/read.cgi/tech/1245059383/ 12 pc12.2ch.net/test/read.cgi/tech/1248010352/ 13 pc12.2ch.net/test/read.cgi/tech/1260842197/ 14 pc12.2ch.net/test/read.cgi/tech/1269273471/ 15 pc12.2ch.net/test/read.cgi/tech/1273368706/ 16 hibari.2ch.net/test/read.cgi/tech/1279285647/ 17 hibari.2ch.net/test/read.cgi/tech/1285115590/ 18 hibari.2ch.net/test/read.cgi/tech/1291571263/ 19 hibari.2ch.net/test/read.cgi/tech/1308106024/
183 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 11:44:46.16 ] C/C++で家が流されないためのプログラムは組めますか? ttp://mukago.game.coocan.jp/main/
184 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 12:07:06.70 ] >>180 俺も横レス 構造化プログラミングは優れた思想だけど、 Cだとそれ以外の選択肢を取りにくい。 C++ならオブジェクト思考だったり、templateだったり、 関数型プログラミングだったり、複数の選択肢が出てくる。 ・・・その代わり機能が多過ぎて覚えるのに時間がかかるけど
185 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 12:09:08.12 ] >>183 Cはハードウェアを制御するプログラミング言語だからそのような機能を備えたハードウェアを開発して そのハードウェアをC/C++から制御するという形でなら可能ではないでしょうか
186 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 12:32:03.11 ] >>183 運が良ければ標準Cだけで可能
187 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 12:33:06.25 ] >>184 覚えるのは難しくないが実際にモノを作るときにどの選択肢がいいのかを正しく選ぶのが難しい
188 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 00:07:22.66 ] >>185 家の土台部分に船のような構造をつけて波に反応して 家から船に変わるとかそんな感じでしょうか? いまいちイメージできません。
189 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 03:50:55.80 ] ランダムに点を取得した際のボーリングのスコアの期待値をだすものを作りたいのですが スコア総あたり→ループ回数で割る という方法よりも効率よく求められる方法ってなにかありますでしょうか?
190 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 04:58:24.79 ] 入社試験のFizzBuzz問題ってだた単にこの処理が書けるかじゃなくて、どれだけ効率良い 処理を書けるかを見られてるんだよね?どんなコードにするのが正解なの?
191 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 05:21:05.06 ] >>189 ランダムに点を取得する(つまり最初の1フレームの1投目のスコア期待値が55/11となる)前提で なげ続けた場合の最終的なトータルスコアの期待値を求めたいってこと? 静的な式になるから、式を作れば簡単に解けるだろうけど、 全部の場合を列挙するのがちょー面倒なんじゃ…特にストライクが癌だな。
192 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 08:35:04.93 ] 30ByteでFizzBazz書けって言われたけど #include<stdio.h> int main(vo で30Byteになってしまった いったいどうすればいいんですか?
193 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 09:18:37.59 ] >>190 プログラミングの基本的なこと(順次実行、分岐、ループ)が理解出来て、それが応用できるかどうかでしょ 要するに「根本的にプログラミングに 向いてない人」をフィルタするための問題かと
194 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 10:17:30.88 ] ありがとう、じゃあ別に普通にif(i%15==0) elseif(i%3==0) elseif(i%5==0) else でも減点ないのか。でもこれじゃ出来ない人なんていなくねと思うけど
195 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 10:39:46.05 ] >>194 信じられないかも知れないが この程度でもまともにコードに出来ない人は本当に居るからなー
196 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 10:59:57.67 ] >>189 分岐は、ストライク、クリア、クリア無しの3つだから、各パターンの期待値を再帰で求める。
197 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 12:01:58.57 ] FizzBazz問題って自分が普段つかってない言語で出されて 困るってものじゃないのか? ループ文なんだっけみたいな。
198 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 12:15:07.78 ] >>196 期待値って1つだろ。
199 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 12:30:13.55 ] >>198 平均値とは多分、確率付き部分期待値の計の事のつもりだろうから、これで合ってる。
200 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 12:35:28.16 ] >>195 いねーよwww
201 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 13:21:10.95 ] >>200 俺も以前はおまえと同じ考えでした…
202 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 16:05:55.41 ] ttp://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm
203 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 16:59:31.69 ] >>199 エスパー? 平均値なんてどこに書かれてるんだ?
204 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 18:51:19.14 ] >>202 それは外国の話だろ 少中高大とマジキチ排除フィルターがよく機能してる日本ではあり得ない
205 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 23:24:03.72 ] 日本でも2〜3%くらいいるんじゃないかと思ってる
206 名前:デフォルトの名無しさん mailto:sage [2011/10/31(月) 00:14:48.55 ] FizzBazz問題ってあの言語もこの言語も使えますって言う奴に、じゃあそれぞれの言語 でFizzBazz書いてみてっていう為の問題じゃないの
207 名前:デフォルトの名無しさん mailto:sage [2011/10/31(月) 00:27:04.90 ] FizzBuzzでゲームとしてやるとなかなか難しいよな
208 名前:デフォルトの名無しさん mailto:sage [2011/11/02(水) 21:44:06.70 ] 転売用にAmazon自動予約スクリプト使いたいけど、パソコンの台数と、回線の数、どっちが大事?
209 名前:デフォルトの名無しさん mailto:sage [2011/11/02(水) 23:09:29.09 ] >>208 コンパイラのバージョンは?
210 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 07:25:39.91 ] >>208 回線の数
211 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 14:40:20.39 ] iに1から9までの値が入力されるまで 延々とscanfを繰り返すプログラムを作りたいのですが do{ scanf("%d",i); } while(i<1||9<i) このようにすると、文字列が入力された時等にwhileを抜けてしまうので上手く動作しません。 想定しない文字列(全角文字や英字、記号)はどのように処理するのが一般的ですか? while(!(0<i&&i<10)も検討してみたのですがこちらはどうでしょう?
212 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 14:47:37.16 ] >>211 ここの下の方のようにすればいいとおもわれ ttp://ja.wikipedia.org/wiki/Scanf
213 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 19:41:38.43 ] >>212 ありがとうございます。 上手く処理できそうです! wikipediaにヒントがあるとは…。 検索不足かつ初歩的な質問ですみませんでした。
214 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 02:57:21.58 ] XMLとかのタグのいい検出方法教えてください。 今は src=strstr(src,タグ名)+strlen(タグ名); '<'までコピー ってしてるけど、汎用性がない
215 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 11:56:25.19 ] >>214 規模が大きいならパーサライブラリを使うのが無難だけど、 そうでもないならstrstr()でもいいんでない? どの辺が汎用性がないと思っているの?
216 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 23:49:27.03 ] >>215 決まったタグしか検出できないとか、タグの書く順番をガチガチに決めておかないと いけないとかそういう辺り。HTMLみたいな感じでタグの書く箇所によって、どこ がどの属性を持つかとかまで指定出来るようにしたいんだけど、それをしようとすると if文で羅列するばっかの馬鹿みたいなコードになっちゃう。 パーサライブラリで調べたらいっぱい出てくるのね。オープンソースの探してどうやってるの か見てみることにする
217 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 03:22:25.00 ] Windowsでプログラムのメモリ消費量を知りたいのですが、どうすればいいのでしょうか? 最大メモリ消費量ではなく、現在のメモリ消費量を随時知りたいです。
218 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 03:49:00.68 ] >>217 ProcessExplorerでも使えばいいやん
219 名前:デフォルトの名無しさん [2011/11/05(土) 03:53:28.86 ] 構造体に特定の値("a")が手入力された時に、ループから抜ける処理をしたいのですが動きません。 aを入力しても5回ループしてしまいます。 コンパイルエラーはないのですが、どこがおかしいか分かりますか? (ファイル分割や構造体の宣言で躓いているかもしれません) /* main.h */ struct shain{ char *name; int num; //未使用 } /* main.c */ myfunc(); /* myfunc.c */ void myfunc(void){ struct shain list[5]; for (i=0 ; i<5; i++){ scanf("%s", &list[i].name); if (list[i].name == "a"){ printf("aが入力されました\n"); break; } } }
220 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 03:53:49.99 ] ここから、ここの処理まではメモリ消費量何Mだったとか書き出したいのです
221 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 04:09:30.08 ] >>219 /* main.h */ struct shain{ char *name; //←ポインタしか作られてない正確には //char nameか、配列やmallocで確保 int num; //未使用 } /* main.c */ myfunc(); /* myfunc.c */ void myfunc(void){ struct shain list[5]; for (i=0 ; i<5; i++){ //int iで宣言 scanf("%s", &list[i].name); //危険、一文字ならgetchar if (list[i].name == "a"){ //""だとaのポインタになっとる。'a'。 //または比較関数使え printf("aが入力されました\n"); break; } } }
222 名前:219 mailto:sage [2011/11/05(土) 04:34:55.93 ] >>221 動いた! ありがとうございます!!
223 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 07:36:28.71 ] visual stadio 2003で作ったプログラムをvisual c++ 2010 expressで使うと deque interator not dereferencableて出ます。 対処法を教えていただきたいです。
224 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 08:38:37.67 ] >>220 アロケータ−作れば?
225 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 17:55:16.70 ] >>223 コピペくらい手順をちゃんと覚えなさいよ。 んで、ここに貼らずに翻訳サイトに貼れば答えが出てくるよ。
226 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 17:56:00.64 ] >>220 自分で書いた処理なら、自分で把握できているでしょ。それを書き出せばいいじゃん。
227 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 23:33:10.37 ] >>220 他人が作ったプロセスのメモリ消費量を知りたいのか、自分のコードの中で、自分の消費した量を知りたいのかで違う。 また、自分の消費した量でも、スタックだとかstaticだとかnewやallocだとかのどの量を知りたいのかで違う。 さらに、スレッド別に知りたいかどうかでも違う。
228 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 06:19:15.51 ] クラスに追加で一時的に変数持たせたい、要するに クラスに計算結果を入れておく変数を一時的に作りたいんだけど、どうすればできますか?
229 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 09:45:43.45 ] そのクラスの定義を変更できないなら直接は無理。そのクラスを継承や包含で利用する別のクラスを作る。
230 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 10:51:17.37 ] >>229 便乗ですみません。継承・委譲はわかるのですが、包含はよくわかりません。java や c++ だとどんな感じのコードになるのでしょうか?
231 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 10:57:15.41 ] >>228 std::map<Hoge const *, TempValueType>
232 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 12:29:13.37 ] >>230 C++で包含といったらある型が他の型(のインスタンス)を内部にもつ(所有する)、くらいのおおまかな概念でしかないよ struct X { // X型はint型とY型を包含する int x; Y y; }; int x[10]; // intの配列型はint型を包含する (とは概念的にはありえるけど普通は言わない)
233 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 14:18:37.77 ] >>244 >>226-227 自分で組んでるプログラムのヒープやスタック全てを合わせたメモリ消費量を知りたい。 そういう関数でもあるかと思ったけど無いのね アロケーター調べてみたけど作るのも面倒そうだし、全部数えて書き出すのは規模的に ありえないしで、もう諦めることにする。ありがとう
234 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 18:14:50.65 ] タスクマネージャで仕様メモリなんか表示できてるんだからあるんじゃねぇの
235 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 18:36:25.60 ] アロケータごときで面倒とか言ってたら何も出来ないだろ
236 名前:デフォルトの名無しさん [2011/11/07(月) 22:20:44.39 ] namespace内のoperatorってどうやって呼べばいいのでしょうか? 例えばboost::assignの += みたいなやつ。 using namespace boost::assign; std::vector<double> vec; vec += "1.0", "2.0"; でusingを使わずにboostのoperator+=を呼ぶ方法はあるのでしょうか?
237 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 23:08:15.53 ] boost::assing::operator , (boost::assign::operator += (vec, "1.0"), "2.0") ; 使ったこと無いからわからんけどたぶんこう
238 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 23:49:54.14 ] operator+=とは違うし試してないがたぶんこういう感じのどれかでいける boost::assign::push_back(vec)("1.0")("2.0"); boost::assign::push_back(vec), "1.0", "2.0"; 追加でなくてよいなら vec = boost::assign::list_of("1.0")("2.0"); vec = boost::assign::list_of("1.0"), "2.0";
239 名前:デフォルトの名無しさん mailto:sage [2011/11/08(火) 00:02:03.97 ] いつ見てもおぞましいインターフェースだな
240 名前:デフォルトの名無しさん mailto:sage [2011/11/08(火) 00:19:13.46 ] vector<double>に文字列はどの方法でも入らんな
241 名前:デフォルトの名無しさん mailto:sage [2011/11/08(火) 04:17:41.94 ] >>239 いやまったく。 boostは確かに便利な局面もあるが、そんな無理しなくてもと思うことの方が多い。
242 名前:デフォルトの名無しさん mailto:sage [2011/11/08(火) 19:15:01.84 ] アドレスを文字列に変換する場合、 void* pVoid = ... ostringstream oss; oss << pVoid; こうするとoss.str()には、例えば「000012AB」という文字列が入るのですが、 16進数・0埋め・桁数など指定していなくても、環境問わずそれらが指定された形になる事は保障されているのでしょうか? また、64bitOSでは16桁になるのでしょうか?
243 名前:デフォルトの名無しさん mailto:sage [2011/11/08(火) 20:15:37.91 ] そんな保証はない
244 名前:デフォルトの名無しさん mailto:sage [2011/11/08(火) 20:16:12.25 ] >>242 「指定していないのに指定された形になることが保証されているのか」って、 自分でなにを言ってるのか良く考えてからどうぞ。
245 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 17:21:00.49 ] 継承って何ですか バカにも分かるように教えて下さい
246 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 18:56:06.66 ] ロマサガ2をやれば分かると思うよ
247 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 19:50:13.26 ] >>245 既存のクラスの一部/全ての機能を利用する新しいクラスを作る手法の一つ
248 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 20:00:36.18 ] >>247 わかりづらいです・・・ ドラゴンボールで例えてみてください・・・
249 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 20:09:31.37 ] >>248 ゴクウを亀仙人のところで修行させてかめはめ波を習得すること。
250 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 20:36:50.37 ] >>248 セルは孫悟空、ベジータ、ピッコロ、フリーザ達の強い細胞を継承して生まれた
251 名前:デフォルトの名無しさん mailto:sage [2011/11/13(日) 01:40:39.84 ] 構造体の実態をexternしたいのですが何をやっても値がnullになってしまいます・・・。 値を代入したソース上で開けばちゃんと値が入っているのですが、他のソースからだと見れないのですが、どうすればいいでしょうか・・・。
252 名前:デフォルトの名無しさん mailto:sage [2011/11/13(日) 02:02:56.46 ] >>251 問題のコードをcodepadかideoneに貼れ。
253 名前:デフォルトの名無しさん mailto:sage [2011/11/13(日) 21:01:12.73 ] 下記ようなのクラスのインスタンスをsetにぶち込むとリンカエラーが来るのですが、 テンプレートでの、friendな演算子の定義の仕方に問題があるのでしょうか? template<class T> class Test{ public: T data; friend bool operator <(const Test<T> &a, const Test<T> &b); }; template<class T> bool operator <(const Test<T> &a, const Test<T> &b){ return a.data<b.data; }
254 名前:デフォルトの名無しさん mailto:sage [2011/11/13(日) 21:20:32.38 ] 宣言と定義を分けるな
255 名前:デフォルトの名無しさん mailto:sage [2011/11/13(日) 21:35:13.87 ] >>254 ありがとうございました。
256 名前:デフォルトの名無しさん mailto:sage [2011/11/14(月) 10:20:27.56 ] こういう事か template <class T> class Test; template <class T> bool operator<(const Test<T>& a, const Test<T>& b) { return a.data < b.data; } template <class T> class Test { T data; public: Test(T val) : data(val) {} friend bool operator< <>(const Test<T>&a, const Test<T>& b); void print() const { std::cout << data << ' '; } }; int main(void) { typedef Test<double> TD; std::set<TD> td; td.insert(TD(1.0)); td.insert(TD(0.5)); std::for_each(std::begin(td), std::end(td), [&](TD t) { t.print();} ); std::cout << std::endl; }
257 名前:デフォルトの名無しさん mailto:sage [2011/11/14(月) 10:24:09.66 ] templateって特殊化した定義ならソースに書いて良いの?
258 名前:デフォルトの名無しさん mailto:sage [2011/11/14(月) 12:25:43.81 ] >>256 それだと Test<int> t(100); t < 123; //できない 50 < t; //できない t < Test<int>(200); //これならできる とかで不便なときがあるぞ
259 名前:デフォルトの名無しさん mailto:sage [2011/11/14(月) 13:01:25.88 ] >>258 当たり前じゃん operator<が定義されてないんだから Testってクラスだよ? 俺は>>253 を試して何とか動くようにしてみただけ
260 名前:デフォルトの名無しさん mailto:sage [2011/11/14(月) 14:20:45.83 ] >>259 >>253 ,254 template <class T> class Test { T data; public: Test(T val) : data(val) {} friend bool operator<(const Test & a, const Test & b) { return a.data < b.data; } }; int main(void) { using namespace std; Test<int> t(100), t2(1000); cout << (t < t2) << endl; cout << (t < 123) << endl; cout << (50 < t) << endl; }
261 名前:デフォルトの名無しさん mailto:sage [2011/11/14(月) 15:22:36.11 ] >>260 どうなってんのこれ? 変換演算子もないのにどうして動くの?
262 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 12:06:13.76 ] templateを使いすぎると実行ファイルが大きくなるから気をつけろって言われたんですけど 実行ファイルが大きくなってなにか困ることがあるんですか?
263 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 12:58:34.87 ] メモリの使用量が増えるとか起動が遅くなるとか
264 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 13:19:24.28 ] 要領不足でインストールできなくなる
265 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 14:09:10.89 ] 大きくなるか??
266 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 14:29:32.76 ] >>260 friendで演算子を定義すると、object.operator@(引数)という形では評価されないので 暗黙のコピーコンストラクタにより一時オブジェクトが生成される もちろんクラス内部にdeep copyが必要な要素が混ざっていると危険なので 自前でコピーコンストラクタを定義する
267 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 15:19:31.90 ] >>265 インライン展開されちゃうよ、な話ではなかろうか。
268 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 15:28:44.33 ] 別にtemplateじゃなくてもインライン展開されるけどね。
269 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 04:20:58.65 ] 今時PC上で動かすならインライン展開できるだけするべきだろ
270 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 04:33:41.80 ] インライン展開はできる限る使わない方が速い。 メモリ使用量が増大するし、同一関数が別々と認識されCPUキャッシュの効果が薄れる。
271 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 05:18:44.06 ] というか、インライン展開で速度速くなるものなの? インライン展開した所で、たいして速くなりそうもない気がする。 アルゴリズムとか制御構造見直した方がよほど速くなる可能性があるだろ。たぶん。
272 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 08:40:21.30 ] ためしにVC++2008でインクリメントするだけの関数で [256 * 256][256]のint配列の全要素をインクリメントしたら inlineじゃないほうが倍ぐらい早かった こういう小さい関数ってinlineの得意な分野だと思ってたけどそうでもなかったようだ
273 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 09:32:48.11 ] >>272 最適化で消えてる可能性は?
274 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 09:38:55.85 ] >>272 何通りか試したら、同等〜20%程inlineのほうが速いよ 最適化防止のコードを入れてないんじゃないの?
275 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 10:04:11.99 ] パフォーマンス測定で最適化防止っておかしくね?
276 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 10:09:15.33 ] インライン展開の効用は、コードをインラインに展開して関数呼び出しを減らすことよりも 関数内部と外部に跨る最適化が施されることにあるよ。 例えば、C++でクラスのメンバのアクセサを作ったとすると、メンバに直接アクセスするのと同じコードになり得る。 ↓のfoo::func()も、最適化で定数と同じになれる。 -- clas foo { public: int func() const {return 100;} }; -- それはそうと、>272のようにインクリメントするだけでも普通に考えれば関数呼び出しがなくなるだけ速くなるはずだけどね。
277 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 18:17:22.55 ] >>270 巨大な関数ならともかく、小さな関数はインライン展開した方が高速。 巨大な関数を展開するコンパイラはないと思うが、されたらキャッシュに響くので低速になる場合がある。 >>271 意味のない比較 >>272 ソースがないので何とも言えないが、君のテスト方法が間違っている可能性大。 その配列のサイズを見る限り、インラインじゃないところにボトルネックがありそう。
278 名前:デフォルトの名無しさん [2011/11/26(土) 19:47:26.08 ] ちょっとageますよ 少し前に糞スレをage荒らししてたアホがいたもんで大事なスレが全部 下の方に行ってしまってる
279 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 19:53:06.42 ] 昔のCPUはジャンプ命令のコストがでかかったとか、パイプライン処理が初期化されるとかで有効だった。 (引数や復帰アドレス保存のコストもかかるし) 10年前にスパコンのアセンブラソース読んだときは分岐先をキャッシュに読み込む命令があって 多少速度低下を軽減出来るようになってた。
280 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 20:02:37.24 ] 今じゃ遅延スロットも完全に消えたしな 投機実行とリターンバッファで十分
281 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 23:14:18.16 ] でもAtomとか流行のスマフォに乗ってるARMにはそこまでの回路はない コンパイラの最適化を働かせるために無意味じゃない
282 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 23:18:06.91 ] Atomがインオーダー実行と聞いた時は驚いたな 命令セットは新しいのに
283 名前:デフォルトの名無しさん mailto:sage [2011/11/29(火) 22:20:26.93 ] エクスプローラっぽいものを作ってるんですが、ファイルの名称、日付、サイズ以外の状態などの取得で詰まってます。 特に特殊フォルダで状態をデフォルトで表示したい場合に困っています。 シェルを使うのかと思ったんですが、わからず。 アドバイスお願いします。