mrubyでmemsetやmemcpyが少ない理由.

たぶんmrubyのソースコードを読むときに疑問に思うFAQ的話題な気がしたので,纏めました.
34

gcc たんは悪くないお!

ちゃんと動くバージョンもあるはず!

Shohei YOSHIDA @syohex

mrubyの memsetのやつ、GCCのバージョンも明記すべきだと思います。新しいのだと直っているって書いているんだし。今の書き方だと GCCすべてに問題があるような受け取られ方をされそうです。

2013-02-27 11:51:49
もなか @monamour555

@syohex 確かにそうですね.でも,この問題,何度も regression しているのですよ.gcc が悪いか否かではなくそもそも ISO C が保証しない memset/memcpy を使うのが悪い,っている書き方が正しいと私は思います.

2013-02-27 12:36:32
もなか @monamour555

@syohex より正確には… s@保証しない memset/memcpy を使う@保証しない memset/memcpy での構造体コピーを行う@ …です.

2013-02-27 12:39:27
Shohei YOSHIDA @syohex

@monamour555 はい、そういう風に書いていただけるととてもよくわかります。

2013-02-27 12:39:20

インライン展開を抑止すればよいのでは?

Shohei YOSHIDA @syohex

memcpyはわからないけど、memsetはコンパイラが配列の初期化等で勝手に出していることがあるので、字面的にないからといって安心できなかったような気がする。--builtinなんとかっていうコンパイルオプションで回避できるのだろうけど。

2013-02-27 07:36:55
もなか @monamour555

仰る通り.で,初期化時 { 0 } 代入で生成された memset でバグが出れば(標準非準拠なので)文句が言えます.一方,自分で書いた memset 初期化でのバグは文句の言い先がありません. QT: @syohex memsetはコンパイラが配列の初期化等で勝手に

2013-02-27 12:51:16
もなか @monamour555

.@omasanori @syohex ええとですねぇ….-fno-builtin 明示でも memset を埋めるバカバージョンが過去の gcc にはあるのですよ…(´・ω・`) http://t.co/9ts2rk4dMF 3.4系はまだ機器組込みでは使ってますからですねぇ.

2013-02-27 12:54:39
Masanori Ogino @omasanori

@monamour555 @syohex なるほど。古い文書の-fno-builtinの解説にmemsetが含まれていないものを見つけて疑問が残っていたのですが、そういう背景であえて外されていたのかもしれませんね。ありがとうございます。

2013-02-27 13:01:56

何を信じればいいのさ!自作関数はきっと遅いぉ

hiroyuki aga @ahryk

memcpyの展開しくじるってひどい話だ...でもどこまで何をあてにしていいのかは悩むな。ちゃんと動くなら自前コードは単に遅いだけだし RT mrubyでmemsetやmemcpyが少ない理由. http://t.co/E83gsUnJ3E

2013-02-27 11:30:01
もなか @monamour555

.@ahryk 自前コードが遅いというのは,あり得ますが,半分誤解です.最近のコンパイラは十分に頭が良いのです.単純なループによる連続メモリコピーは,memset/memcpy と同等のコードを吐くと期待できます. 現場では,コンパイラが吐くアセンブラコードで各自判断を

2013-02-27 12:43:38
hiroyuki aga @ahryk

@monamour555 おっと誤解をまねく表現でした。締切ギリギリにコンパイラのバグが発覚すると、いろいろ疑心暗鬼に陥るので、速度は二の次でとにかく安全確実なコードにしたくなりがち、というつもりでした。

2013-02-27 19:06:35
もなか @monamour555

@ahryk 変な事をしないほうが生成されるコードが速くなるということもありますからね.Duff's device のように.

2013-02-27 20:19:22

注) Duff's device は,ものすごく変態な見た目のコードでイカニモ最適化できていそうな,C言語専用の記述法です.
でも,頭のよいコンパイラの場合,素直に書いたほうが最適化が効いて速くなる場合もあったりします.
詳しくは Wikipedia 辺りをチェキ.

【ステマ】蛇足【ステマ】

もなか @monamour555

構造体の memset 初期化にまつわる問題は,最近 Interface誌の連載で書きました. http://t.co/2LBCBEiTSi Amazonだとプレミアついちゃってるなぁ…むーん. http://t.co/G7Fdga4J0i

2013-02-27 12:59:40