mrubyでmemsetやmemcpyが少ない理由.
- monamour555
- 17943
- 14
- 76
- 14
gcc たんは悪くないお!
ちゃんと動くバージョンもあるはず!
mrubyの memsetのやつ、GCCのバージョンも明記すべきだと思います。新しいのだと直っているって書いているんだし。今の書き方だと GCCすべてに問題があるような受け取られ方をされそうです。
2013-02-27 11:51:49@syohex 確かにそうですね.でも,この問題,何度も regression しているのですよ.gcc が悪いか否かではなく,そもそも ISO C が保証しない memset/memcpy を使うのが悪い,っている書き方が正しいと私は思います.
2013-02-27 12:36:32@syohex より正確には… s@保証しない memset/memcpy を使う@保証しない memset/memcpy での構造体コピーを行う@ …です.
2013-02-27 12:39:27インライン展開を抑止すればよいのでは?
memcpyはわからないけど、memsetはコンパイラが配列の初期化等で勝手に出していることがあるので、字面的にないからといって安心できなかったような気がする。--builtinなんとかっていうコンパイルオプションで回避できるのだろうけど。
2013-02-27 07:36:55仰る通り.で,初期化時 { 0 } 代入で生成された memset でバグが出れば(標準非準拠なので)文句が言えます.一方,自分で書いた memset 初期化でのバグは文句の言い先がありません. QT: @syohex memsetはコンパイラが配列の初期化等で勝手に
2013-02-27 12:51:16.@omasanori @syohex ええとですねぇ….-fno-builtin 明示でも memset を埋めるバカバージョンが過去の gcc にはあるのですよ…(´・ω・`) http://t.co/9ts2rk4dMF 3.4系はまだ機器組込みでは使ってますからですねぇ.
2013-02-27 12:54:39@monamour555 @syohex なるほど。古い文書の-fno-builtinの解説にmemsetが含まれていないものを見つけて疑問が残っていたのですが、そういう背景であえて外されていたのかもしれませんね。ありがとうございます。
2013-02-27 13:01:56何を信じればいいのさ!自作関数はきっと遅いぉ
memcpyの展開しくじるってひどい話だ...でもどこまで何をあてにしていいのかは悩むな。ちゃんと動くなら自前コードは単に遅いだけだし RT mrubyでmemsetやmemcpyが少ない理由. http://t.co/E83gsUnJ3E
2013-02-27 11:30:01.@ahryk 自前コードが遅いというのは,あり得ますが,半分誤解です.最近のコンパイラは十分に頭が良いのです.単純なループによる連続メモリコピーは,memset/memcpy と同等のコードを吐くと期待できます. 現場では,コンパイラが吐くアセンブラコードで各自判断を.
2013-02-27 12:43:38@monamour555 おっと誤解をまねく表現でした。締切ギリギリにコンパイラのバグが発覚すると、いろいろ疑心暗鬼に陥るので、速度は二の次でとにかく安全確実なコードにしたくなりがち、というつもりでした。
2013-02-27 19:06:35@ahryk 変な事をしないほうが生成されるコードが速くなるということもありますからね.Duff's device のように.
2013-02-27 20:19:22注) Duff's device は,ものすごく変態な見た目のコードでイカニモ最適化できていそうな,C言語専用の記述法です.
でも,頭のよいコンパイラの場合,素直に書いたほうが最適化が効いて速くなる場合もあったりします.
詳しくは Wikipedia 辺りをチェキ.
【ステマ】蛇足【ステマ】
構造体の memset 初期化にまつわる問題は,最近 Interface誌の連載で書きました. http://t.co/2LBCBEiTSi Amazonだとプレミアついちゃってるなぁ…むーん. http://t.co/G7Fdga4J0i
2013-02-27 12:59:40