[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 06/01 04:20 / Filesize : 164 KB / Number-of Response : 702
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

スレを勃てるまでもないC/C++の質問はここで 20



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 ]
エクスプローラっぽいものを作ってるんですが、ファイルの名称、日付、サイズ以外の状態などの取得で詰まってます。
特に特殊フォルダで状態をデフォルトで表示したい場合に困っています。
シェルを使うのかと思ったんですが、わからず。
アドバイスお願いします。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<164KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef