!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/
C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf
C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
※前スレ
C言語なら俺に聞け 154
https://mevius.5ch.net/test/read.cgi/tech/1578997950/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
C言語なら俺に聞け 155
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 76ba-P5bm)
2020/05/10(日) 23:20:27.99ID:Z3WQBr9X0588デフォルトの名無しさん (ワッチョイ 1394-keh3)
2020/07/22(水) 15:52:35.64ID:xRlBM5RB0 // benchmark
int r = f(size, data1, data2);
// end
ftime(&timebuffer);
sec = timebuffer.time - sec;
millisec = timebuffer.millitm - millisec;
millisec += sec * 1000;
printf("%d ms \n %d", millisec, r);
free(data1);
free(data2);
}
int r = f(size, data1, data2);
// end
ftime(&timebuffer);
sec = timebuffer.time - sec;
millisec = timebuffer.millitm - millisec;
millisec += sec * 1000;
printf("%d ms \n %d", millisec, r);
free(data1);
free(data2);
}
589デフォルトの名無しさん (JP 0H55-ZQKC)
2020/07/22(水) 16:01:48.88ID:lGyqioywH f()で0返せばいいんじゃね?
590デフォルトの名無しさん (ワッチョイ 1394-keh3)
2020/07/22(水) 16:06:36.57ID:xRlBM5RB0 たしかにrが0になるが
たぶんsrand, randで値の分布が一様じゃないせいか?
Javaとの性能比較してたんだけど乱数生成法が合わせれないな
たぶんsrand, randで値の分布が一様じゃないせいか?
Javaとの性能比較してたんだけど乱数生成法が合わせれないな
591デフォルトの名無しさん (ワッチョイ 1394-keh3)
2020/07/22(水) 16:07:57.00ID:xRlBM5RB0 あ違うなsizeがでかすぎると0になっちゃうのか
592デフォルトの名無しさん (ワッチョイ 69e6-5TCi)
2020/07/22(水) 16:11:34.79ID:1buRSft90 Java(VM)とCという言語の比較をしたいのかこのソースを最適化したいのかrandの仕様を統一したいのか意味不明だわ
593デフォルトの名無しさん (ワッチョイ 1394-keh3)
2020/07/22(水) 16:21:46.25ID:xRlBM5RB0 JavaとCの性能比較で「Javaは高速だCに負けてない」とか
「JITやGCが動作する時に遅くなるだけだ」とか良く言われてる。
でもこういう単純な配列処理でCの方が3倍くらい速いよな、と思って。
この処理は計測中にヒープ割当が無いからGC関係ない(Javaでオブジェクトを作成するとGCのためのオーバーヘッドがあるらしい)。
JavaでJIT効かせてから計測してもCが4倍弱速かった。
最初1900msもかかるといってたのは勘違い。Cの方が4倍弱速いから予想通りの性能だった。
Javaの性能に関する言説を見渡しても、なぜこういう処理でJavaが遅いのか説明が無い。
大量のデータを処理しつつ特定の値に収束しない良いベンチマークコードがあればいいんだが。
足す引きを交互に繰り返すか。
「JITやGCが動作する時に遅くなるだけだ」とか良く言われてる。
でもこういう単純な配列処理でCの方が3倍くらい速いよな、と思って。
この処理は計測中にヒープ割当が無いからGC関係ない(Javaでオブジェクトを作成するとGCのためのオーバーヘッドがあるらしい)。
JavaでJIT効かせてから計測してもCが4倍弱速かった。
最初1900msもかかるといってたのは勘違い。Cの方が4倍弱速いから予想通りの性能だった。
Javaの性能に関する言説を見渡しても、なぜこういう処理でJavaが遅いのか説明が無い。
大量のデータを処理しつつ特定の値に収束しない良いベンチマークコードがあればいいんだが。
足す引きを交互に繰り返すか。
594デフォルトの名無しさん (ワッチョイ 1301-KHfa)
2020/07/22(水) 16:24:26.21ID:t6q0HDDX0 >>586
data1[i] & data2[i] の計算を100回もやることはないから
int f(int size, int *data1, int *data2) {
int *data3 = (int*) malloc(size * sizeof(int));
for (int i = 0; i < size; i++) {
data3[i] = data1[i] & data2[i];
}
int r = 0;
for (int j = 0; j < 100; j++) {
for (int i = 0; i < size; i++) {
r ^= data3[i];
}
}
free(data3);
return r;
}
ってやると多少速くなるかも
あとは分割してスレッドで並行して実行するとかかな
data1[i] & data2[i] の計算を100回もやることはないから
int f(int size, int *data1, int *data2) {
int *data3 = (int*) malloc(size * sizeof(int));
for (int i = 0; i < size; i++) {
data3[i] = data1[i] & data2[i];
}
int r = 0;
for (int j = 0; j < 100; j++) {
for (int i = 0; i < size; i++) {
r ^= data3[i];
}
}
free(data3);
return r;
}
ってやると多少速くなるかも
あとは分割してスレッドで並行して実行するとかかな
595デフォルトの名無しさん (ワッチョイ 1394-keh3)
2020/07/22(水) 16:26:57.20ID:xRlBM5RB0 これで収束しないし毎回ランダムな結果になる。
long f(int size, int *data1, int *data2) {
long r = 0;
for (int j = 0; j < 100; j++) {
for (int i = 0; i < size; i++) {
r += data1[i] - data2[i];//ここ変えた
}
}
return r;
}
long f(int size, int *data1, int *data2) {
long r = 0;
for (int j = 0; j < 100; j++) {
for (int i = 0; i < size; i++) {
r += data1[i] - data2[i];//ここ変えた
}
}
return r;
}
596デフォルトの名無しさん (JP 0H55-ZQKC)
2020/07/22(水) 16:34:17.16ID:lGyqioywH なんだ、^ の意味わかってなかったのか。
ていうか、コードの最適化を求めるなら、
そのコードの目的のほうが先に存在するはずじゃないのか?
コロコロ変えてさあ最適化しろとかおかしいだろ。
ていうか、コードの最適化を求めるなら、
そのコードの目的のほうが先に存在するはずじゃないのか?
コロコロ変えてさあ最適化しろとかおかしいだろ。
597デフォルトの名無しさん (ワッチョイ 1394-keh3)
2020/07/22(水) 16:39:25.22ID:xRlBM5RB0 0になってたのは^じゃなくて&が原因だろ
598デフォルトの名無しさん (JP 0H55-ZQKC)
2020/07/22(水) 16:42:01.87ID:lGyqioywH ^ だよ
最後のやつで + を ^ にしたらどうなる?
最後のやつで + を ^ にしたらどうなる?
599デフォルトの名無しさん (ワッチョイ 1394-keh3)
2020/07/22(水) 16:44:20.78ID:xRlBM5RB0 あr=0でr^=使ってたからか
演算子の意味じゃなくてr=0で始めてる事との整合性に気付いてなかった
r = rand();
r ^= data1[i] ^ data2[i]
これなら収束しないはず
演算子の意味じゃなくてr=0で始めてる事との整合性に気付いてなかった
r = rand();
r ^= data1[i] ^ data2[i]
これなら収束しないはず
600デフォルトの名無しさん (JP 0H55-ZQKC)
2020/07/22(水) 16:46:16.22ID:lGyqioywH それ、最初の rand の値が返るだけだから。
601デフォルトの名無しさん (エムゾネ FF33-keh3)
2020/07/22(水) 16:56:43.54ID:J+LKPgcIF もしかして残念なベンチ
602デフォルトの名無しさん (JP 0H55-ZQKC)
2020/07/22(水) 17:05:53.92ID:lGyqioywH 目的の明確でないベンチマーク作っても無駄だよね。
何を調べたいの?
何を調べたいの?
603デフォルトの名無しさん (ワッチョイ 69e6-5TCi)
2020/07/22(水) 17:19:08.68ID:1buRSft90 > この処理は計測中にヒープ割当が無い
って書いてあるけどガッツリ malloc してるし本当に何がしたいのか良く分からない
って書いてあるけどガッツリ malloc してるし本当に何がしたいのか良く分からない
604デフォルトの名無しさん (スププ Sd33-Y9Vl)
2020/07/22(水) 17:34:24.16ID:Y73iWKLTd 全ての値を偶数回^すれば答えは0になって当然
605デフォルトの名無しさん (ワッチョイ 1394-keh3)
2020/07/22(水) 17:58:11.98ID:xRlBM5RB0606デフォルトの名無しさん (スップ Sd73-Ky2H)
2020/07/22(水) 17:59:58.58ID:HrEyCXiAd >>586
大いに改善の余地あり
0になることを仮定せずに真面目に計算するとして
データがメモリがキャッシュに入るとすると
計算の依存関係ありまくりだから
ほぼレイテンシ待ちになる
ループ4周を展開して
rを4個に分けるだけで速くなりそう
SIMD命令が使えるなら
非常に効果がある形なので
使えるなら使う
この場合も演算の依存関係は減らすこと
データがキャッシュに収まらないなら
メモリ速度で決まるからあまり関係ない
大いに改善の余地あり
0になることを仮定せずに真面目に計算するとして
データがメモリがキャッシュに入るとすると
計算の依存関係ありまくりだから
ほぼレイテンシ待ちになる
ループ4周を展開して
rを4個に分けるだけで速くなりそう
SIMD命令が使えるなら
非常に効果がある形なので
使えるなら使う
この場合も演算の依存関係は減らすこと
データがキャッシュに収まらないなら
メモリ速度で決まるからあまり関係ない
607デフォルトの名無しさん (ワッチョイ 1394-keh3)
2020/07/22(水) 18:03:43.69ID:xRlBM5RB0 代入されないんじゃなくて偶数回^すると元に戻るのか
608デフォルトの名無しさん (ブーイモ MM4d-ZQKC)
2020/07/22(水) 18:04:59.81ID:YNla03BQM609デフォルトの名無しさん (ワッチョイ 1394-keh3)
2020/07/22(水) 18:09:25.81ID:xRlBM5RB0610デフォルトの名無しさん (ワッチョイ 1394-keh3)
2020/07/22(水) 18:12:28.77ID:xRlBM5RB0 あーじゃあr=0で始めてたことは関係無くて、
単に二重ループの外側が偶数回だと無意味だと。
r=0で始めてもXORならちゃんとビット列変わってたけどXORの性質から元に戻ってたと。
コンパイラがそれ知ってたら最適化して処理消しちゃうから良くないな。
XORのその性質を知らなかった
単に二重ループの外側が偶数回だと無意味だと。
r=0で始めてもXORならちゃんとビット列変わってたけどXORの性質から元に戻ってたと。
コンパイラがそれ知ってたら最適化して処理消しちゃうから良くないな。
XORのその性質を知らなかった
611デフォルトの名無しさん (ワッチョイ 1394-keh3)
2020/07/22(水) 18:26:49.94ID:xRlBM5RB0 より正しく述べておこう
・1回でも101回でも同じ結果なのでXOR版では二重ループの外側が無意味
・data1, data2がどんな数列でもXORの性質は同様にある
ID:lGyqioywHとID:YNla03BQMはこれを言ってたんだな
・1回でも101回でも同じ結果なのでXOR版では二重ループの外側が無意味
・data1, data2がどんな数列でもXORの性質は同様にある
ID:lGyqioywHとID:YNla03BQMはこれを言ってたんだな
612デフォルトの名無しさん (ワッチョイ 1394-keh3)
2020/07/22(水) 18:26:50.13ID:xRlBM5RB0 より正しく述べておこう
・1回でも101回でも同じ結果なのでXOR版では二重ループの外側が無意味
・data1, data2がどんな数列でもXORの性質は同様にある
ID:lGyqioywHとID:YNla03BQMはこれを言ってたんだな
・1回でも101回でも同じ結果なのでXOR版では二重ループの外側が無意味
・data1, data2がどんな数列でもXORの性質は同様にある
ID:lGyqioywHとID:YNla03BQMはこれを言ってたんだな
613デフォルトの名無しさん (ブーイモ MM4d-ZQKC)
2020/07/22(水) 19:03:36.52ID:YNla03BQM かようにベンチマークっていうのは難しいんだ。
CPUの比較をするだけでもいろんな提案があって
SPECとかはなんとか信頼されているが、
言語間の性能比較とか素人が適当にでっち上げても、
そのプログラムが悪いだけじゃねってなるのがオチ。
CPUの比較をするだけでもいろんな提案があって
SPECとかはなんとか信頼されているが、
言語間の性能比較とか素人が適当にでっち上げても、
そのプログラムが悪いだけじゃねってなるのがオチ。
614デフォルトの名無しさん (ワッチョイ d9ca-13t9)
2020/07/22(水) 21:28:34.34ID:EzFbgF7R0 最終的に 0 になるだろけど、この計算は愚直に行われるんでしょ。
答えが 0 にしかならないことと C と Java の速度差がそうなることとはまた別の話だよね。
って、コードの最適化の話だったんだっけ?
答えが 0 にしかならないことと C と Java の速度差がそうなることとはまた別の話だよね。
って、コードの最適化の話だったんだっけ?
615デフォルトの名無しさん (ワッチョイ 1394-keh3)
2020/07/22(水) 22:22:42.43ID:xRlBM5RB0 Cがこの処理でJavaより3〜4倍速い事は確認できた。
0に収束する事とそれは無関係。
以下、一応書くけど完全にスレ違い。
このような単純な配列処理でCとJavaの速度差がなぜ生じるか?はまだ分かってない。
・HotSpotは配列の境界チェックを除去できる
・一般論としてJavaが遅くなる原因としてJITやGCが挙げられるがこの単純なプログラムではそれらの影響はない
予想
・1命令で処理できるサイズが違っている?約4倍の速度差はベクトル演算の差で説明できそう。
だとしたらなぜJavaのJITはそれをやらないか?
・CPUキャッシュの問題?Javaの場合CPUキャッシュが別の何かで埋まってしまっている可能性
0に収束する事とそれは無関係。
以下、一応書くけど完全にスレ違い。
このような単純な配列処理でCとJavaの速度差がなぜ生じるか?はまだ分かってない。
・HotSpotは配列の境界チェックを除去できる
・一般論としてJavaが遅くなる原因としてJITやGCが挙げられるがこの単純なプログラムではそれらの影響はない
予想
・1命令で処理できるサイズが違っている?約4倍の速度差はベクトル演算の差で説明できそう。
だとしたらなぜJavaのJITはそれをやらないか?
・CPUキャッシュの問題?Javaの場合CPUキャッシュが別の何かで埋まってしまっている可能性
616デフォルトの名無しさん (ワッチョイ 69e6-A04g)
2020/07/22(水) 22:30:57.82ID:1buRSft90 自分のブログでやって
617デフォルトの名無しさん (ワッチョイ d9c3-Y9Vl)
2020/07/22(水) 23:08:24.67ID:G9I2XdZp0 そもそもjavaがc/c++並に速いとか、かなり嘘や誤魔化し入っているから
速度差3-4倍で済むなら十分健闘している
javaのコードを移植して、無駄にmalloc freeしまくったりする糞コードならもっと迫れるだろうけど
速度差3-4倍で済むなら十分健闘している
javaのコードを移植して、無駄にmalloc freeしまくったりする糞コードならもっと迫れるだろうけど
618デフォルトの名無しさん (ワッチョイ 3997-nH3A)
2020/07/23(木) 02:25:27.91ID:tfGyNQFW0619デフォルトの名無しさん (ガラプー KK4d-XNsZ)
2020/07/23(木) 04:09:18.13ID:NaEhWCW1K 最初の>>586の問いがベンチマークを意図してるとは思われてなかったから{return 0;}で良いんじゃね?ってなったんでは
620デフォルトの名無しさん (ワッチョイ d9ca-13t9)
2020/07/23(木) 11:21:03.05ID:TTqTgaIL0 javaの配列は特別な宣言無しに別スレッドでこっそり書き換えてもちゃんと反映されるわけだから、単純処理であっても最適化にも限界があるだろうな。
Cの場合は、他で書き換えられるかもと指定しておかなければ他所のことなんておかまいなしに処理できるから、その点だけでも有利だよね。
>>586 のコードのなら、i のループに入る前に data[j] を変数に取り置いて i のループ内で使用するようにすれば、java の方では高速化されるんじゃね。
C ならそれをコンパイラがやってくれてそう。
Cの場合は、他で書き換えられるかもと指定しておかなければ他所のことなんておかまいなしに処理できるから、その点だけでも有利だよね。
>>586 のコードのなら、i のループに入る前に data[j] を変数に取り置いて i のループ内で使用するようにすれば、java の方では高速化されるんじゃね。
C ならそれをコンパイラがやってくれてそう。
621デフォルトの名無しさん (ワッチョイ d9ca-13t9)
2020/07/23(木) 11:24:21.68ID:TTqTgaIL0 逆にCの側で配列を volatile にしておけば Java との速度差は小さくなるかもね。
622デフォルトの名無しさん (スップ Sd73-Ky2H)
2020/07/23(木) 11:26:24.50ID:V2V2cZYad data[j]なんかないけど
623デフォルトの名無しさん (ブーイモ MM9d-C2Yk)
2020/07/23(木) 11:46:46.14ID:vtZyy6ICM じゃあjava.util.concurrent.atomic以下にある配列クラスは全部廃止だな
624デフォルトの名無しさん (ワッチョイ 1394-keh3)
2020/07/23(木) 12:46:54.76ID:tYvDqilk0 ベクトル演算の未適用が原因だとほぼ特定できた。
625デフォルトの名無しさん (スップ Sd73-Ky2H)
2020/07/23(木) 13:17:22.41ID:V2V2cZYad626デフォルトの名無しさん (スップ Sd73-Ky2H)
2020/07/23(木) 13:19:58.21ID:V2V2cZYad 簡単な処理のために巨大メモリをスキャンするのは超無駄
627デフォルトの名無しさん (ワッチョイ 1394-keh3)
2020/07/23(木) 13:51:39.59ID:tYvDqilk0 C版
size
1000*1000 * 1 20ms
1000*1000 * 10 191ms
1000*1000 * 100 1893ms
線形な変化だからCPUキャッシュに載り切るかで性能が分かれるという事が生じてない。
たぶんCPUキャッシュは「繰り返し使うデータ」じゃないと有意義じゃない。
この処理だとCPUキャッシュ上のデータを排除可能になるまでの時間がボトルネックで、
つまり「CPU上のデータを処理しきって次の要素を受け付けれるようになるまでの時間」が支配的なはずで
そこがベクトル演算で高速化してる。
Java版も線形に変化した。
で、Javaのコードでr += data1[i] + data2[i]のところでdata1のみにしたら2倍速になったからベクトル演算未適用が原因でほぼ間違いない。
その行で+か-か^か&かは結論に影響しない。
size
1000*1000 * 1 20ms
1000*1000 * 10 191ms
1000*1000 * 100 1893ms
線形な変化だからCPUキャッシュに載り切るかで性能が分かれるという事が生じてない。
たぶんCPUキャッシュは「繰り返し使うデータ」じゃないと有意義じゃない。
この処理だとCPUキャッシュ上のデータを排除可能になるまでの時間がボトルネックで、
つまり「CPU上のデータを処理しきって次の要素を受け付けれるようになるまでの時間」が支配的なはずで
そこがベクトル演算で高速化してる。
Java版も線形に変化した。
で、Javaのコードでr += data1[i] + data2[i]のところでdata1のみにしたら2倍速になったからベクトル演算未適用が原因でほぼ間違いない。
その行で+か-か^か&かは結論に影響しない。
628デフォルトの名無しさん (ワッチョイ d9ca-13t9)
2020/07/23(木) 13:55:19.10ID:TTqTgaIL0629デフォルトの名無しさん (ワッチョイ d9ca-13t9)
2020/07/23(木) 14:11:44.83ID:TTqTgaIL0 >>623
値が volatile なことと操作が atomic なことは別の話だよ。
自分が書き換えない同じ領域を複数参照するとき、それを他の誰も書き換えないならその参照は一度目の値と同じになる前提で最適化できるけど、他の誰かがいつの間にか書き換えることがあるならそういう最適化はできなくなる。
そういう領域であることを明示するのが volatile。
atomic は同じ領域を誰かが書き換える前提なので基本的にその領域は volatile だけど、それに加えて値を参照して手を加えて書き戻すなどの一連の手続きの途中で他の誰かにいじられないことを保証すること。
それを CPUレベルの命令で行うかソフトウェア的なロックで行うかで色分けされてるだけ。
値が volatile なことと操作が atomic なことは別の話だよ。
自分が書き換えない同じ領域を複数参照するとき、それを他の誰も書き換えないならその参照は一度目の値と同じになる前提で最適化できるけど、他の誰かがいつの間にか書き換えることがあるならそういう最適化はできなくなる。
そういう領域であることを明示するのが volatile。
atomic は同じ領域を誰かが書き換える前提なので基本的にその領域は volatile だけど、それに加えて値を参照して手を加えて書き戻すなどの一連の手続きの途中で他の誰かにいじられないことを保証すること。
それを CPUレベルの命令で行うかソフトウェア的なロックで行うかで色分けされてるだけ。
630デフォルトの名無しさん (スップ Sd73-Ky2H)
2020/07/23(木) 14:28:36.26ID:V2V2cZYad >>627
CPUは何?
CPUは何?
631デフォルトの名無しさん (スップ Sd73-Ky2H)
2020/07/23(木) 14:33:33.27ID:V2V2cZYad メモリアクセスの影響がないなら
iとjのループを入れ換える
ループアンロール
rを偶数奇数で分ける
SIMD
などが有効
iとjのループを入れ換える
ループアンロール
rを偶数奇数で分ける
SIMD
などが有効
632デフォルトの名無しさん (スップ Sd73-Ky2H)
2020/07/23(木) 14:36:26.08ID:V2V2cZYad633デフォルトの名無しさん (ワッチョイ 1394-keh3)
2020/07/23(木) 14:42:55.39ID:tYvDqilk0634デフォルトの名無しさん (スップ Sd73-Ky2H)
2020/07/23(木) 14:44:16.58ID:V2V2cZYad CPUは何?
635デフォルトの名無しさん (ワッチョイ f97f-9CAQ)
2020/07/23(木) 16:21:21.26ID:WGvvEAFm0636デフォルトの名無しさん (ワッチョイ d9ca-13t9)
2020/07/23(木) 16:39:16.32ID:TTqTgaIL0 >>635
保証ってなんの話?
保証ってなんの話?
637デフォルトの名無しさん (ワッチョイ d901-1JrC)
2020/07/23(木) 20:41:12.28ID:j3eQi4Nn0638デフォルトの名無しさん (ワッチョイ 13ad-5TCi)
2020/07/24(金) 03:10:38.82ID:6ZonvnML0 volatile ってスレッドに限らず値が知らない内に変化する可能性のある何かの入力でも使うよね。
例えばマイクから拾った音を A/D 変換した値がメモリマップドI/Oで特定のアドレスのメモリ読む方法で読める場合。
CPUが予想不能な形で値がコロコロ変わるので volatile にせざるを得ない。(volatile って揮発性とか不安定って意味だし、言葉の意味そのままだ)。
これは読む側だけど書いて何かを出力する場合も、書いた値を読めないような作りになっている場合もある。
1を書いたのに直後に読むと0だったりなんていう事はあり得る。要するに一々覚えていない。または覚えていても読み出しに対応していない。
そんなハードウェアが接続されていたらそうなる。
例えばマイクから拾った音を A/D 変換した値がメモリマップドI/Oで特定のアドレスのメモリ読む方法で読める場合。
CPUが予想不能な形で値がコロコロ変わるので volatile にせざるを得ない。(volatile って揮発性とか不安定って意味だし、言葉の意味そのままだ)。
これは読む側だけど書いて何かを出力する場合も、書いた値を読めないような作りになっている場合もある。
1を書いたのに直後に読むと0だったりなんていう事はあり得る。要するに一々覚えていない。または覚えていても読み出しに対応していない。
そんなハードウェアが接続されていたらそうなる。
639デフォルトの名無しさん (ワッチョイ 812c-WQpp)
2020/07/24(金) 04:44:18.69ID:So4dssPK0 そりゃ、外部装置と連動しているから、値がいつ変わるか分からない
外部装置が読み書きしたら、合図として、0.1ms 後に、値を反転させたりとか、
色んな事をするから、予測できない
外部装置が読み書きしたら、合図として、0.1ms 後に、値を反転させたりとか、
色んな事をするから、予測できない
640デフォルトの名無しさん (ラクッペペ MMeb-Sn4z)
2020/07/24(金) 09:33:19.23ID:ASBY7bf4M volatileは変数(I/Oアドレス)に対するアクセス行為は保障するけど値そのものに対しては何の意味もない
そもそも外部要因で変化する値に対して干渉するのは不可能
そもそも外部要因で変化する値に対して干渉するのは不可能
641デフォルトの名無しさん (ワッチョイ 1301-KHfa)
2020/07/24(金) 10:20:02.92ID:4h264/iA0 どこから干渉するとか出てきたんだ…
知ってる知識を開陳したくてしょうがないんだろうなw
知ってる知識を開陳したくてしょうがないんだろうなw
642デフォルトの名無しさん (ワッチョイ d9da-u8K7)
2020/07/24(金) 15:22:34.69ID:jNVRIcub0 volatileな変数を読むのは怖いよね
ワード単位ならいいけど、構造体読むときはチェックサム欲しくなるよね
ワード単位ならいいけど、構造体読むときはチェックサム欲しくなるよね
643デフォルトの名無しさん (ワッチョイ d9ca-13t9)
2020/07/24(金) 18:25:04.01ID:ogZVfXfN0 別に怖くはないだろ。
他所と排他するなりしかるべきタイミングでアクセスすればいいだけなんだから。
排他や同期が必要な領域にそれをせずにアクセスするならただのアホってだけで、volatile がどうとかいう話じゃない。
他所と排他するなりしかるべきタイミングでアクセスすればいいだけなんだから。
排他や同期が必要な領域にそれをせずにアクセスするならただのアホってだけで、volatile がどうとかいう話じゃない。
644デフォルトの名無しさん (ワッチョイ 71b3-Ky2H)
2020/07/24(金) 20:10:16.16ID:Cmq7VG8v0 LL/SC命令が結構使える
645デフォルトの名無しさん (ワッチョイ 130e-5TCi)
2020/07/25(土) 04:21:09.10ID:qNFJliza0646デフォルトの名無しさん (ワッチョイ d901-fOmF)
2020/07/26(日) 03:07:46.88ID:4oXiyEBn0 「書きこんだものの読み込んでないからコードから消しちまえ」
「読み込んでるけど、代入以降値がかわる気配がないから、読み込みを止めて固定値にしちまえ」
これを抑制するだけ
書き込や読み込みを記述通り生き残らせる
「読み込んでるけど、代入以降値がかわる気配がないから、読み込みを止めて固定値にしちまえ」
これを抑制するだけ
書き込や読み込みを記述通り生き残らせる
647デフォルトの名無しさん (ワッチョイ 71b3-Ky2H)
2020/07/26(日) 08:34:28.91ID:M65fvK3w0 W=>R : R省略
R1=>R2 : R2省略
W1=>W2 : W1省略
R1=>R2 : R2省略
W1=>W2 : W1省略
648デフォルトの名無しさん (ワッチョイ 1301-KHfa)
2020/07/26(日) 10:41:35.23ID:3q3cv3BJ0 volatile覚えて嬉しいのはわかるけど…
649デフォルトの名無しさん (スップ Sd73-Ky2H)
2020/07/26(日) 11:55:59.05ID:7t5aGHPkd volatileの意味を知らない人 vs volatileを覚えたての人
650デフォルトの名無しさん (ブーイモ MMcb-C2Yk)
2020/07/26(日) 12:24:46.27ID:oYG2ZyVyM vs 30年前の常識で語る人
651デフォルトの名無しさん (ワッチョイ 8146-ZDF1)
2020/07/26(日) 13:35:18.59ID:6eSsd+mZ0 ANSIは邪道。
652デフォルトの名無しさん (ワッチョイ 13ad-5TCi)
2020/07/26(日) 18:14:24.05ID:hRZi6+cn0 あんししー
653デフォルトの名無しさん (ワッチョイ 41bb-RnSF)
2020/07/26(日) 20:08:24.24ID:VBmKLhih0 アンジー、なんてこと言うの
シー
シー
654デフォルトの名無しさん (ワッチョイ 130e-5TCi)
2020/07/27(月) 02:57:00.46ID:BRKetx390 30年くらい前までドヤる人が好んで口にしてたけどね
そういう人はC89ができたらピタリとやめた
今まだ言ってる珍獣って何なん?
そういう人はC89ができたらピタリとやめた
今まだ言ってる珍獣って何なん?
655はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 413e-fOmF)
2020/07/27(月) 08:26:00.92ID:IvOd7acF0 姫宮アンシー
656デフォルトの名無しさん (ワッチョイ 130e-5TCi)
2020/07/27(月) 16:25:16.57ID:BRKetx390 C89以前のK&R Cは個人的には好きなので
gcc -traditional復活して欲しい
gcc -traditional復活して欲しい
657デフォルトの名無しさん (ワッチョイ 0963-RnSF)
2020/07/27(月) 16:41:53.18ID:euzbjA/F0 関数定義で引数が()の外に書かれる記述みると、
今は違和感が湧いてしまう
今は違和感が湧いてしまう
658はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 413e-fOmF)
2020/07/27(月) 16:45:47.58ID:IvOd7acF0 書き方が違うだけなら古いスタイルでもいいんだけど、型チェックが緩いんだよな。
659デフォルトの名無しさん (ワッチョイ 130e-5TCi)
2020/07/27(月) 17:14:06.93ID:BRKetx390 アセンブラ屋出身の俺っちにはどうでもいいことだ
660はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 413e-fOmF)
2020/07/27(月) 17:35:58.30ID:IvOd7acF0 引数の数を間違えているのに黙って通してしまう例。
https://wandbox.org/permlink/FEu474UVSsilTq0L
最適化オプションを付けたらフロー解析も強まるのか警告してくれたけど。
https://wandbox.org/permlink/FEu474UVSsilTq0L
最適化オプションを付けたらフロー解析も強まるのか警告してくれたけど。
661デフォルトの名無しさん (ワッチョイ 13ad-5TCi)
2020/07/27(月) 18:50:57.45ID:8GZ2GqSj0662デフォルトの名無しさん (ワッチョイ 3997-nH3A)
2020/07/27(月) 23:59:05.30ID:UIY75t8S0 スタックが壊れないならまあいいんじゃね?
663デフォルトの名無しさん (ワッチョイ 130e-5TCi)
2020/07/28(火) 03:43:48.32ID:JnUAmZD/0 あのなあ、おまえら。。。。
K&R Cに対する批判なんて今さらドヤるか?
規格Cを憶えるときにプロトタイプは何のためか
説明受けてないやつがここにいるとでも思うのか?
K&R Cに対する批判なんて今さらドヤるか?
規格Cを憶えるときにプロトタイプは何のためか
説明受けてないやつがここにいるとでも思うのか?
664デフォルトの名無しさん (アウアウウー Sa5d-d0Nl)
2020/07/28(火) 13:28:44.28ID:DVrEteyfa (キリッ
665デフォルトの名無しさん (ワッチョイ 8146-ZDF1)
2020/07/28(火) 19:40:24.44ID:1JEs8/dl0 "#C-PLA" という店名をどう思いますか。
>>663
やっぱり C99 or later を叩くのがかっこいいですよね
やっぱり C99 or later を叩くのがかっこいいですよね
667デフォルトの名無しさん (ワッチョイ 5910-Xo7T)
2020/07/28(火) 20:02:16.84ID:geCJz7H80 >>665
オブジェクトをカプセル化・・・?
オブジェクトをカプセル化・・・?
668デフォルトの名無しさん (ワッチョイ fa94-UdrD)
2020/07/29(水) 17:10:37.12ID:tqWMyndD0 浮動小数の演算で生じる誤差は常に絶対値が小さくなるように行われる、
という前提は正しい?
という前提は正しい?
669デフォルトの名無しさん (ワッチョイ fa94-UdrD)
2020/07/29(水) 17:11:14.42ID:tqWMyndD0 C限定の話じゃないからスレ違いか
670デフォルトの名無しさん (ワイーワ2 FF62-lIev)
2020/07/29(水) 17:12:49.06ID:hY/5h1XOF 日本語として可笑しいのでgoto語学板へ
671デフォルトの名無しさん (アウアウウー Sa09-oq/g)
2020/07/29(水) 17:14:56.87ID://053udPa >>668
正しい気がする
正しい気がする
672デフォルトの名無しさん (アウアウウー Sa09-oq/g)
2020/07/29(水) 17:18:22.13ID://053udPa >>668
ごめん嘘ついた。
ごめん嘘ついた。
673デフォルトの名無しさん (ワッチョイ fa0e-xE3T)
2020/07/29(水) 17:21:06.57ID:8sSsdFab0 >>668
ライブラリやFPUの実装の話だね
例えばだけどIEEE754の定義では
仮数部は1.xxxxxxと、整数部が常に1なので
整数部を省き、その分の1bitを小数部に回す「ケチ表現」で
誤差がなるべく小さくなるように工夫している
ライブラリやFPUの実装の話だね
例えばだけどIEEE754の定義では
仮数部は1.xxxxxxと、整数部が常に1なので
整数部を省き、その分の1bitを小数部に回す「ケチ表現」で
誤差がなるべく小さくなるように工夫している
674デフォルトの名無しさん (ワッチョイ da52-kd5w)
2020/07/29(水) 17:25:55.07ID:Bu6uxHFv0675デフォルトの名無しさん (ワッチョイ fa94-UdrD)
2020/07/29(水) 17:28:44.72ID:tqWMyndD0 doubleを分解(0.1や0.3とかでかけて複数のdouble値にする)して足し合わせて比較、
という処理を無限回繰り返して元の絶対値を超えていたら停止、
みたいなテストコードを書いてみたけど、低確率で元の絶対値を超える。
この誤差が分解と足すときどちらで生じているか分からないが
なんにせよ浮動小数点数演算の誤差で絶対値が増加する場合があるようだ。
という処理を無限回繰り返して元の絶対値を超えていたら停止、
みたいなテストコードを書いてみたけど、低確率で元の絶対値を超える。
この誤差が分解と足すときどちらで生じているか分からないが
なんにせよ浮動小数点数演算の誤差で絶対値が増加する場合があるようだ。
676デフォルトの名無しさん (ワッチョイ fa0e-xE3T)
2020/07/29(水) 17:45:17.74ID:8sSsdFab0 あ、誤差の絶対値ではなく、結果の絶対値ということ?
俺の勘違いだったら悪いんだけど、それじゃ意味なくね?
結果が正数ならともかく負数の場合デメリットだけやん
俺の勘違いだったら悪いんだけど、それじゃ意味なくね?
結果が正数ならともかく負数の場合デメリットだけやん
677デフォルトの名無しさん (スププ Sd9a-xoHN)
2020/07/29(水) 18:11:52.28ID:+Q7sP3F+d 丸めモードによって変わるだろうに
絶対値が小さくなるのはround toward zeroにしたときだな
絶対値が小さくなるのはround toward zeroにしたときだな
678デフォルトの名無しさん (ワッチョイ 79bb-Xvfy)
2020/07/30(木) 05:23:55.72ID:82YOHtIh0 Cのソースコードを解析するツールで有名なものって何かありますでしょうか?
679デフォルトの名無しさん (ワッチョイ ce8c-LW7E)
2020/07/30(木) 06:42:57.43ID:ixil7w/z0 上司がこっそり使っていた cflow
680デフォルトの名無しさん (ワッチョイ d1b3-Fkfq)
2020/07/30(木) 07:04:40.85ID:SsIpxIlu0 >>668
加減乗算のほとんどの実装ではそう
加減乗算のほとんどの実装ではそう
681デフォルトの名無しさん (ワッチョイ 0101-iVY1)
2020/08/10(月) 04:07:37.60ID:SKFyjjt90 デファクトスタンダードなCのコーディング作法を手っ取り早く
身につけるために何をすべきですか?
身につけるために何をすべきですか?
682デフォルトの名無しさん (ワッチョイ 0101-Ea0s)
2020/08/10(月) 04:47:16.15ID:o5h87VM/0 所属がわからないと何とも言えませんね。
社名と部署お願いします。
社名と部署お願いします。
683デフォルトの名無しさん (ワッチョイ d1da-e++8)
2020/08/10(月) 04:53:08.55ID:P+mDn/zj0 車載の組み込み系以外は
それぞれの会社にコーディング規約あるんじゃない?
知らんけど
それぞれの会社にコーディング規約あるんじゃない?
知らんけど
684デフォルトの名無しさん (ワッチョイ 1b8c-oftG)
2020/08/10(月) 06:50:01.64ID:ruBmk/3z0 お手本のプログラムを上司に見せてもらい完コピする。
685デフォルトの名無しさん (ワッチョイ 992c-B5sl)
2020/08/10(月) 06:53:36.45ID:k2ud7k4K0 >>681
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006
この研究会は、トヨタなど大企業から、数十人のベテが集まって、
欧州人に聞きながら、作った本
未だに、コーディングルールのバイブルだろ
元々は、Andrew Koenig の本
C Traps and Pitfalls, 1988, c1989
Cプログラミングの落とし穴
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006
この研究会は、トヨタなど大企業から、数十人のベテが集まって、
欧州人に聞きながら、作った本
未だに、コーディングルールのバイブルだろ
元々は、Andrew Koenig の本
C Traps and Pitfalls, 1988, c1989
Cプログラミングの落とし穴
>>685
>数十人のベテ
司法試験板をみると「ベテ」というのは30代以降の複数回受験者のことらしいですよ
文脈によっては veteran は階級を問わず退役軍人を意味することもありますし‥‥「わしが現役の頃には」を壊れたレコード盤のように繰り返すイメージとか
ベテランという言葉に必ずしもプラスイメージが伴っているとは限らないことはしっておいたほうがいいんじゃないですか?
>数十人のベテ
司法試験板をみると「ベテ」というのは30代以降の複数回受験者のことらしいですよ
文脈によっては veteran は階級を問わず退役軍人を意味することもありますし‥‥「わしが現役の頃には」を壊れたレコード盤のように繰り返すイメージとか
ベテランという言葉に必ずしもプラスイメージが伴っているとは限らないことはしっておいたほうがいいんじゃないですか?
687デフォルトの名無しさん (ワッチョイ 130e-e++8)
2020/08/10(月) 07:23:02.78ID:tfnxCl0S0 能書きはいいから内容を見ろや
あれを見てくだらねえと思うことが何もないやつは
自分がなさすぎだ
あれを見てくだらねえと思うことが何もないやつは
自分がなさすぎだ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ [冬月記者★]
- 自民・麻生太郎副総裁 石破政権の1年は「どよーん」 高市政権発足で「何となく明るくなった」「世の中のことが決まり動いている」★2 [Hitzeschleier★]
- 【おこめ券】鈴木憲和農相 小泉前農相の備蓄米放出を“反省”「備蓄の円滑な運営を図ってまいります」 [Hitzeschleier★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- ゆたぼん 二重手術を報告「めちゃくちゃ気に入っています」 [muffin★]
- 【山形】クマ駆除で誤射した猟友会隊員に町が1663万円請求へ...弾当たり男性大けが2023年 小国町 [nita★]
- 【WOWOW】UEFAチャンピオンズリーグ・ヨーロッパリーグ ★18
- とらせん
- 巨専】
- 【WOWOW】UEFAチャンピオンズリーグ・ヨーロッパリーグ ★17
- こいせん 全レス転載禁止
- わしせん ようこそ佐藤直樹くん ありがとう石井さん
- 中国人、ガチ超正論。「日本人がアイヌに対してやったことを『問題ない』とするなら、中国が日本人に同じことをしても文句ないだろう?」 [314039747]
- 【悲報】新米、全く売れなくて倉庫が満杯になってしまうwwwwwwwwwwwwwwwwwwww [802034645]
- 木曜日のんなっしょい❗(・o・🍬)仕放題スレ🏡
- 【悲報】日本共産党、ツイッター速報にブチギレ法的措置WWWWWWWWWWWWWWWWWWWWWWWWWWWW [935793931]
- 官僚「台湾有事についての質問か、『政府として逐一答えない』と…(カタカタカタ)」高市「私1人で答弁できるわよ!」 [972432215]
- 【悲報】麻生太郎さん、オムツをしていた。晋さん…ここにいたんだね… [731544683]
