!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:Z3WQBr9X0512デフォルトの名無しさん (オイコラミネオ MM51-mXGD)
2020/07/10(金) 22:08:00.13ID:edpv1F1UM >>511
QZ先生がどのくらいのリスクを前提に言っているのかにもよりますけど、
上限なき malloc については、リスク回避の点で、私はやっぱり問題にしたいですねえ。
おっしゃる通り、malloc が失敗を返した場合は概ね問題ないと思うのですが。
逆に malloc が成功を返した場合はどうです?
共有リソースとしてのメモリを奪いきってしまった結果としての成功であるなら、
OSによっては、他のプロセスのメモリ確保失敗に伴う致命的エラーを誘発するなどして、
広範囲な問題を引き起こすやもしれません。
先人の知恵として、システムコールやAPIの仕様として、インターフェイスにせよ、内部的にせよ、上限を設けてあると思います。
getline の内部は見てないのですが、極端に大きなサイズになりそうなら、malloc を呼び出す前に、
上限値を超えました的なエラーを返すような、慎重なコーディングになっていることを期待したいところです
QZ先生がどのくらいのリスクを前提に言っているのかにもよりますけど、
上限なき malloc については、リスク回避の点で、私はやっぱり問題にしたいですねえ。
おっしゃる通り、malloc が失敗を返した場合は概ね問題ないと思うのですが。
逆に malloc が成功を返した場合はどうです?
共有リソースとしてのメモリを奪いきってしまった結果としての成功であるなら、
OSによっては、他のプロセスのメモリ確保失敗に伴う致命的エラーを誘発するなどして、
広範囲な問題を引き起こすやもしれません。
先人の知恵として、システムコールやAPIの仕様として、インターフェイスにせよ、内部的にせよ、上限を設けてあると思います。
getline の内部は見てないのですが、極端に大きなサイズになりそうなら、malloc を呼び出す前に、
上限値を超えました的なエラーを返すような、慎重なコーディングになっていることを期待したいところです
513はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 053e-ucCN)
2020/07/10(金) 23:07:47.23ID:HDImBgbn0 >>511
実行環境に固有の特殊事情ではあるけど
Linux だとメモリが足りなくても malloc が成功する場合がある。 (オーバーコミット)
malloc の返り値を気にしても無駄。
想定以上の巨大な行の読み込み (メモリ割り当ての失敗) に対して
何か対処する機会なくプロセスごと殺される (OOM Killer) かもしれないので、
想定する上限があるなら設定できて欲しいよ。
実行環境に固有の特殊事情ではあるけど
Linux だとメモリが足りなくても malloc が成功する場合がある。 (オーバーコミット)
malloc の返り値を気にしても無駄。
想定以上の巨大な行の読み込み (メモリ割り当ての失敗) に対して
何か対処する機会なくプロセスごと殺される (OOM Killer) かもしれないので、
想定する上限があるなら設定できて欲しいよ。
514デフォルトの名無しさん (ワッチョイ 2301-LRpg)
2020/07/11(土) 00:41:24.74ID:UdJEarb20 ドライバレベルの仕様に詳しい人って、そこそこ不幸だよね😅
515デフォルトの名無しさん (ワッチョイ cb63-56/R)
2020/07/11(土) 00:58:32.96ID:YkgvwUMV0 誰かが特攻隊に志願しないと行けないからな
516デフォルトの名無しさん (ワッチョイ 45bd-L1/G)
2020/07/11(土) 04:47:05.81ID:dhYEJgZ00 >>513
メモリを確保するだけじゃなく中身を詰めて返すから、内部でメモリ量を超える malloc に成功しながら中身を詰めてる過程でメモリ不足で落ちそうだね。
上限設けてないと回避できない深刻な問題になりそう。
メモリを確保するだけじゃなく中身を詰めて返すから、内部でメモリ量を超える malloc に成功しながら中身を詰めてる過程でメモリ不足で落ちそうだね。
上限設けてないと回避できない深刻な問題になりそう。
517デフォルトの名無しさん (ワッチョイ 8510-YwU+)
2020/07/11(土) 20:25:40.62ID:3ggQxlyq0 mallocはウィザードリィみたいだよな
518デフォルトの名無しさん (ワッチョイ 6352-PJiH)
2020/07/12(日) 11:24:42.19ID:VdrMQ+ag0 >>517
どの辺が?
どの辺が?
519デフォルトの名無しさん (ワッチョイ 05da-mXGD)
2020/07/12(日) 12:22:43.74ID:pMv4WACh0 >>518
岩の中にテレポートしそうなあたりじゃないかな
岩の中にテレポートしそうなあたりじゃないかな
520デフォルトの名無しさん (ワッチョイ 75b0-ucCN)
2020/07/12(日) 12:31:19.68ID:lQJaWZP00 そういえば、初期のosxはオーバーコミットと動的スワップの合わせ技で、ディスクの空き容量が
少ないとよく固まってたな。しかもfinderではまだ空きがあるように見えても実際には最小空き容量に
引っかかるという油断のならない仕様だった。
少ないとよく固まってたな。しかもfinderではまだ空きがあるように見えても実際には最小空き容量に
引っかかるという油断のならない仕様だった。
521デフォルトの名無しさん (ワッチョイ fdbb-mXGD)
2020/07/12(日) 14:47:47.78ID:RLT83ouV0 マクロを使った面白いコードを教えてください
522デフォルトの名無しさん (ワッチョイ ab7c-jFjK)
2020/07/12(日) 14:50:59.64ID:uGVzSaa20 先に面白いの判定基準を出せ
523デフォルトの名無しさん (ワッチョイ fdbb-mXGD)
2020/07/12(日) 14:55:11.44ID:RLT83ouV0 >>522
トリッキーなやつで普段お目にかかれないやつです
トリッキーなやつで普段お目にかかれないやつです
524デフォルトの名無しさん (ワッチョイ 230e-ucCN)
2020/07/12(日) 16:14:17.46ID:TX1mpKr60525デフォルトの名無しさん (ワッチョイ fdbb-mXGD)
2020/07/12(日) 16:26:56.92ID:RLT83ouV0526デフォルトの名無しさん (ワッチョイ 230e-ucCN)
2020/07/12(日) 16:34:02.06ID:TX1mpKr60 自分で解読しなきゃ
他人に聞いたら意味ないよ
他人に聞いたら意味ないよ
527デフォルトの名無しさん (ワッチョイ 7546-Dz1Y)
2020/07/12(日) 18:07:11.46ID:eOx5QXnj0528デフォルトの名無しさん (ブーイモ MM99-Kmjx)
2020/07/12(日) 19:01:50.30ID:XR2tpNWXM 落ち着け、IOCCC知らんのか
529デフォルトの名無しさん (ワッチョイ ab7c-jFjK)
2020/07/12(日) 19:40:25.98ID:uGVzSaa20 昔観た砂嵐のもこんなんだったな
マクロ使ってたかどうかは覚えてないけど
いずれにしても中身に意味があるとは思えない
マクロ使ってたかどうかは覚えてないけど
いずれにしても中身に意味があるとは思えない
530デフォルトの名無しさん (ワッチョイ 230e-ucCN)
2020/07/12(日) 19:48:29.22ID:TX1mpKr60 地上波アナログ?
531デフォルトの名無しさん (ワッチョイ ab7c-jFjK)
2020/07/13(月) 09:07:37.15ID:+mCuetAH0 落ち着け、IOCCC知らんのか
532デフォルトの名無しさん (ワッチョイ 230e-ucCN)
2020/07/13(月) 11:02:55.12ID:wLJMlZf60 わざと解りにくく書いたコードだぞ
「ちゃんと動くプログラム」という制約のもとで
解りにくさを競っているんだよ
「ちゃんと動くプログラム」という制約のもとで
解りにくさを競っているんだよ
533デフォルトの名無しさん (アウアウエー Sa13-c9t6)
2020/07/13(月) 11:11:26.83ID:Q6XHo6fua >>525
岩の中にテレポートしそうなあたりじゃないかな
岩の中にテレポートしそうなあたりじゃないかな
534デフォルトの名無しさん (スッップ Sd43-Tflg)
2020/07/13(月) 12:02:49.97ID:JZTlaHWid >>527
素人かよ
素人かよ
535デフォルトの名無しさん (エムゾネ FF43-jFjK)
2020/07/13(月) 12:06:46.27ID:WBkWHxcTF >>527 本人じゃないけど
成型ツールで戻せば良いとか言うレベルじゃなくて
マジックナンバー使いまくりの手動最適化コードとか
読み難くする以外のメリットなんにも無い時間の無駄
難読化ツールとかの話も関係無い
成型ツールで戻せば良いとか言うレベルじゃなくて
マジックナンバー使いまくりの手動最適化コードとか
読み難くする以外のメリットなんにも無い時間の無駄
難読化ツールとかの話も関係無い
536デフォルトの名無しさん (スッップ Sd43-Tflg)
2020/07/13(月) 12:12:02.64ID:JZTlaHWid 人間が読む事を想定してないコード
なんていう発想は無いのか
なんていう発想は無いのか
537デフォルトの名無しさん (ワッチョイ 230e-ucCN)
2020/07/13(月) 12:18:07.92ID:wLJMlZf60 機械語がそうだね
538デフォルトの名無しさん (ワッチョイ cbd2-ucCN)
2020/07/13(月) 12:20:50.91ID:HqaSJoay0 難読ソースコンテストってのがあるって25年前に聞いた。
539デフォルトの名無しさん (エムゾネ FF43-jFjK)
2020/07/13(月) 12:22:42.17ID:WBkWHxcTF どんなネタでも餌にして生きていける人って別の意味で浦山
540デフォルトの名無しさん (ワッチョイ 857b-4PPV)
2020/07/13(月) 12:39:50.37ID:17o/9bhC0 って言うか >>1 でリンク張られてるサイト
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
の 20.36 が 国際難解Cコードコンテスト(IOCCC) の紹介ですよ。
まぁ知らなくても実用では少しも困らないネタ話だけどね。
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
の 20.36 が 国際難解Cコードコンテスト(IOCCC) の紹介ですよ。
まぁ知らなくても実用では少しも困らないネタ話だけどね。
541デフォルトの名無しさん (JP 0H93-4zP6)
2020/07/13(月) 13:06:29.12ID:UIoR1/02H IT掲示板群 ttp://x0000.net/forum.aspx?id=15
学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0
UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0
連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
4Dエンジン(画像有り)
ttp://x0000.net/topic.aspx?id=3677-0
matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0
ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0
SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0
☆ VMを書いた(C#) * x86ではない!
ttp://up.x0000.net/files/TSimulang.zip
☆ malloc / free を実装してみた (C#)
ttp://up.x0000.net/files/TMallocTest.zip
学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0
UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0
連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
4Dエンジン(画像有り)
ttp://x0000.net/topic.aspx?id=3677-0
matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0
ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0
SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0
☆ VMを書いた(C#) * x86ではない!
ttp://up.x0000.net/files/TSimulang.zip
☆ malloc / free を実装してみた (C#)
ttp://up.x0000.net/files/TMallocTest.zip
542デフォルトの名無しさん (ワッチョイ 23ad-skOr)
2020/07/13(月) 23:11:58.86ID:9EBd4T6S0 >>540
読み方は?
読み方は?
543デフォルトの名無しさん (スップ Sdda-BbQx)
2020/07/15(水) 14:29:54.86ID:U8iX10oDd あいおーしーしーしー
544デフォルトの名無しさん (ワッチョイ 5510-Zd+S)
2020/07/15(水) 15:00:37.70ID:67nW9VWC0 催し物やな
545デフォルトの名無しさん (ワッチョイ 5a0e-YsWi)
2020/07/15(水) 15:52:55.55ID:N3ltiDOr0 市民館みたいなとこでやってるわけじゃないがな
546デフォルトの名無しさん (ワッチョイ daad-0yBj)
2020/07/15(水) 20:44:36.96ID:pJ20MS8a0 CCCの部分はトリプルCではなく?
547デフォルトの名無しさん (ワッチョイ 5a0e-YsWi)
2020/07/15(水) 20:50:18.41ID:N3ltiDOr0 うん、トリプルって読み方する人には会ったことがないな
548デフォルトの名無しさん (ワッチョイ 5a0e-YsWi)
2020/07/15(水) 20:50:51.37ID:N3ltiDOr0 あいとりぷるいーは普通だけど
549デフォルトの名無しさん (ブーイモ MMde-cWPK)
2020/07/15(水) 21:08:27.18ID:a3wypoikM このクイズ番組の回答者が読み方喋ってる
https://youtu.be/f7WPP-5GG58
https://youtu.be/f7WPP-5GG58
550デフォルトの名無しさん (ワッチョイ 41b3-6M5R)
2020/07/15(水) 21:53:44.85ID:JGqdiMCl0551デフォルトの名無しさん (アウアウエー Sa02-l+/r)
2020/07/16(木) 00:44:59.58ID:ZFOOaYp/a >>546
カルチュアコンビニエンスクラブ
カルチュアコンビニエンスクラブ
552デフォルトの名無しさん (ワッチョイ 9de6-YsWi)
2020/07/16(木) 04:02:23.42ID:CYft8xDJ0 >>550
イェェェ!!
イェェェ!!
553デフォルトの名無しさん (ワッチョイ 6905-YsWi)
2020/07/16(木) 09:30:43.69ID:UNVzIGjY0 >>548
イエエエ!
イエエエ!
554デフォルトの名無しさん (ワッチョイ ee8c-+zMD)
2020/07/16(木) 09:34:53.50ID:+sr/NO6P0 >>548
アイドルぷりぷり
アイドルぷりぷり
555デフォルトの名無しさん (ワッチョイ daad-YsWi)
2020/07/16(木) 22:21:03.87ID:HOuHYCld0 東京が goto キャンペーンから外されて本当に良かった。
>>555
goto hell キャンペーン?
goto hell キャンペーン?
557デフォルトの名無しさん (ワッチョイ daad-YsWi)
2020/07/16(木) 23:23:34.12ID:HOuHYCld0 東京以外は goto を使ったCプログラムで溢れかえるんだろうなあ・・・
558デフォルトの名無しさん (ワッチョイ 6d63-zSg9)
2020/07/16(木) 23:59:23.84ID:miG5Ngn20 すべてのreturnは東京に帰る
559デフォルトの名無しさん (アウアウエー Sa02-rGUB)
2020/07/17(金) 00:08:23.19ID:UXHw+Bbza exit((int) "TOKYO");
560デフォルトの名無しさん (ワッチョイ 5a0e-YsWi)
2020/07/17(金) 06:35:08.70ID:FmIaoXoT0 令和のgoto有害説
561デフォルトの名無しさん (ワッチョイ 752d-sTnA)
2020/07/17(金) 08:41:43.61ID:UlzyaY8x0 gotoとラベル
562デフォルトの名無しさん (スップ Sdda-BbQx)
2020/07/17(金) 09:09:08.77ID:+XePIYq+d うまいな
563デフォルトの名無しさん (アウアウウー Sa39-lbAa)
2020/07/17(金) 20:54:53.28ID:TuO7NpMNa くっ。やられた。
私の負けを認めよう。
私の負けを認めよう。
564デフォルトの名無しさん (ワッチョイ c628-UH/d)
2020/07/18(土) 12:46:51.82ID:PyiwbgQS0 奥村先生が書いてらっしゃる
「いまさらC言語」
https://scrapbox.io/imasaraC/
って、「初学者がC言語を学ぶ」という目的にはそぐいますか?
偉そうな言い方なんですけど、C言語の基礎を一通りなぞる感じには見えませんでした。
ですが、もしもC言語の基礎をこの記事で勉強できるなら、
奥村先生直筆の日本語文書ですし、ぜひ参考にさせていただきたいのです。
「いまさらC言語」
https://scrapbox.io/imasaraC/
って、「初学者がC言語を学ぶ」という目的にはそぐいますか?
偉そうな言い方なんですけど、C言語の基礎を一通りなぞる感じには見えませんでした。
ですが、もしもC言語の基礎をこの記事で勉強できるなら、
奥村先生直筆の日本語文書ですし、ぜひ参考にさせていただきたいのです。
565デフォルトの名無しさん (アウウィフ FF39-L8bc)
2020/07/18(土) 12:56:27.17ID:uRU3MGLxF 散文っぽくて体系的じゃない感じは受けた
「いまさら」であって「初めての」ではないので文字通り受け取って
既に知ってる人が改めて見直す機会には良いんじゃね
scanf
https://scrapbox.io/imasaraC/scanf()
fgets
https://scrapbox.io/imasaraC/fgets()
「いまさら」であって「初めての」ではないので文字通り受け取って
既に知ってる人が改めて見直す機会には良いんじゃね
scanf
https://scrapbox.io/imasaraC/scanf()
fgets
https://scrapbox.io/imasaraC/fgets()
566デフォルトの名無しさん (ワッチョイ c628-UH/d)
2020/07/18(土) 15:06:19.54ID:PyiwbgQS0567デフォルトの名無しさん (ワッチョイ ee8c-G2ah)
2020/07/21(火) 00:25:21.83ID:Wl7zo7XN0 すっごいポンコツPCでmacでCSV作って作ったの読み込んで計算して表示してって10回ぐらい繰り返したら同じデータ表示されるの?
568デフォルトの名無しさん (ブーイモ MMa1-cWPK)
2020/07/21(火) 00:30:45.40ID:Y7gEkUNqM ポンコツだとたまに計算間違うから無理じゃないかなあ
569蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdfa-ch6b)
2020/07/21(火) 00:32:52.06ID:iLwMnecKd >>567
本当にポンコツであれば、主メモリーかHDDが壊れている可能性がある。
本当にポンコツであれば、主メモリーかHDDが壊れている可能性がある。
570デフォルトの名無しさん (ワッチョイ ee8c-G2ah)
2020/07/21(火) 00:34:45.78ID:Wl7zo7XN0 >>567
なんかこんな環境でやったらCSVのデータが更新されなくて10回全部同じ計算になってるって事が起きたから
やった人はsleepで遅らせたら変化したって言ってたからそんなことが起きる事があるのかって不思議に思ったわ
なんかこんな環境でやったらCSVのデータが更新されなくて10回全部同じ計算になってるって事が起きたから
やった人はsleepで遅らせたら変化したって言ってたからそんなことが起きる事があるのかって不思議に思ったわ
571はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 693e-hHzd)
2020/07/21(火) 01:27:00.90ID:VthsC7AN0 メモリは思ったより信用できない (ちょいちょい化ける) という話を
何かのウェブブラウザ関連の文章で読んだことがあるような
気がするんだけど思い出せない。
何かのウェブブラウザ関連の文章で読んだことがあるような
気がするんだけど思い出せない。
572デフォルトの名無しさん (ワッチョイ 6d63-zSg9)
2020/07/21(火) 01:41:36.17ID:bmKYQrdR0 おじいちゃん
573デフォルトの名無しさん (ワッチョイ 7663-GoP2)
2020/07/21(火) 02:56:31.73ID:i26SyfyA0 簡単に化けるから誤り検出符号なるものが存在している
HDDはもちろんメモリだって物理的に劣化する
HDDはもちろんメモリだって物理的に劣化する
574デフォルトの名無しさん (ラクッペペ MM0e-M824)
2020/07/21(火) 03:18:48.82ID:e/mkPZH8M575デフォルトの名無しさん (ワントンキン MMea-rqus)
2020/07/21(火) 03:19:15.76ID:z3AOQZxtM ディスクキャッシュでなかったかな。
毎度syncするようなkernelパラメータか何かを与えないと旧データを読み出すような事象が昔あったような。
毎度syncするようなkernelパラメータか何かを与えないと旧データを読み出すような事象が昔あったような。
576デフォルトの名無しさん (ワッチョイ 5a0e-YsWi)
2020/07/21(火) 08:19:11.51ID:6CpMqD4P0577デフォルトの名無しさん (オッペケ Sr75-J55X)
2020/07/21(火) 17:26:30.39ID:TSoseUQ7r C言語を3ヶ月前から勉強し始めたものです。この間、C言語3級を受験しました。
C言語かなり難しいです。
苦労しながらC言語学んだ方いますか?
C言語かなり難しいです。
苦労しながらC言語学んだ方いますか?
578デフォルトの名無しさん (ワッチョイ 69bb-zSg9)
2020/07/21(火) 17:28:45.77ID:aESJfhai0 はい
なんでしょう
なんでしょう
579デフォルトの名無しさん (オッペケ Sr75-J55X)
2020/07/21(火) 17:30:55.73ID:TSoseUQ7r 安心しました
がんばります
がんばります
580デフォルトの名無しさん (ワッチョイ 5a0e-YsWi)
2020/07/21(火) 17:30:56.37ID:6CpMqD4P0 苦労せずに学んだやつなんているのか?
元々アセンブラ屋でアドレスやポインタが当たり前だった俺でさえ
それなりに脂汗かきながら憶えたぞ
元々アセンブラ屋でアドレスやポインタが当たり前だった俺でさえ
それなりに脂汗かきながら憶えたぞ
581デフォルトの名無しさん (ワッチョイ 95ca-ebQW)
2020/07/21(火) 18:13:57.71ID:zwiBtbEn0 独学で始めたからリンカの使い方とかよく分からず、C のソースを全部 include してたな。
582デフォルトの名無しさん (ワッチョイ 7646-NUPd)
2020/07/21(火) 19:46:32.95ID:tvr2GUf40 >>581
nanisore. 面白い。詳しく。
nanisore. 面白い。詳しく。
583デフォルトの名無しさん (ワッチョイ 6d63-zSg9)
2020/07/21(火) 20:00:00.53ID:bmKYQrdR0 多分分割コンパイルのやり方を知らなかった頃の話だろう
584デフォルトの名無しさん (ワッチョイ 95ca-ebQW)
2020/07/21(火) 20:10:11.93ID:zwiBtbEn0585デフォルトの名無しさん (アウアウエー Sa02-rGUB)
2020/07/21(火) 22:42:16.68ID:nbzaQebba 依存ファイル集める方がよほど知識が要りそう
586デフォルトの名無しさん (ワッチョイ 1394-keh3)
2020/07/22(水) 15:51:53.55ID:xRlBM5RB0 このコード最適化の余地ある?-O3でやっても1900msとかかかるんだけど
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int f(int size, int *data1, int *data2) {
int r = 0;
for (int j = 0; j < 100; j++) {
for (int i = 0; i < size; i++) {
r ^= data1[i] & data2[i];
}
}
return r;
}
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int f(int size, int *data1, int *data2) {
int r = 0;
for (int j = 0; j < 100; j++) {
for (int i = 0; i < size; i++) {
r ^= data1[i] & data2[i];
}
}
return r;
}
587デフォルトの名無しさん (ワッチョイ 1394-keh3)
2020/07/22(水) 15:52:29.23ID:xRlBM5RB0 int main(int argc, char *argv[]) {
int size = 1000 * 1000 * 100;
int *data1 = (int*) malloc(size * sizeof(int));
int *data2 = (int*) malloc(size * sizeof(int));
//setup test data
srand((int) time(NULL));
for (int i = 0; i < size; i++) {
data1[i] = rand();
data2[i] = rand();
}
int sec, millisec;
struct timeb timebuffer;
//start
ftime(&timebuffer);
sec = timebuffer.time;
millisec = timebuffer.millitm;
int size = 1000 * 1000 * 100;
int *data1 = (int*) malloc(size * sizeof(int));
int *data2 = (int*) malloc(size * sizeof(int));
//setup test data
srand((int) time(NULL));
for (int i = 0; i < size; i++) {
data1[i] = rand();
data2[i] = rand();
}
int sec, millisec;
struct timeb timebuffer;
//start
ftime(&timebuffer);
sec = timebuffer.time;
millisec = timebuffer.millitm;
588デフォルトの名無しさん (ワッチョイ 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はこれを言ってたんだな
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「中国人の訪日熱は冷めた」 人気旅行先から日本外れる 14日で自粛呼びかけ1カ月 ★3 [蚤の市★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★8 [蚤の市★]
- 「1800万円の売り上げゼロに…」中国インバウンドに特化の宿の今 ★2 [蚤の市★]
- 最新版Z級クソ映画ランキングが決定! [牛丼★]
- 公用車カーナビのNHK受信料「全額免除を」 千葉市議会、国に制度創設求める意見書可決 [少考さん★]
- 【食】「シャウエッセンは焼くべからず」暗黙のルールを破り売上高過去最高…日本ハム社員たちが「夜味」にかけた情熱 [ぐれ★]
- どこだ?強ええええバキぼんやは????
- ( ´・ω・` )どいてもらえます?
- 【埼玉】34歳無職、置き配📦を盗みまくる!その数、400点!😱 [718678614]
- 福井県民に頭おかしくされて悔しいからスレ立て
- 【MLB】打率3割と2桁ホームランを達成した日本人はイチロー、松井、大谷だけ←これ
- なあ、「石破さんにもう一回やって頂く」って選択肢って…ないか? [976717553]
