__フリーソースコードのレベル__
■ このスレッドは過去ログ倉庫に格納されています
0001夏厨学生
NGNG公開されてますが、これらのレベルってどうなんでしょう?
業務レベルには程遠いんでしょうか?
また、業務レベルのソースとはどういうソースなんでしょうか。
0153デフォルトの名無しさん
NGNG藻前ら、ありがとう!!!
0154デフォルトの名無しさん
NGNGISO/IEC 9899:1999 の Initialization の項に、
assure あるいは guarantee といった単語は出てこない。
0155デフォルトの名無しさん
NGNG構造体のinitializerが足りない場合は、
>the remainder of the aggregate shall be
>initialized implicitly the same as objects that have static storage duration.
ってことで、残りのメンバは0に初期化されるわけか。
memsetやZeroMemoryよりもやっぱこっちで十分だな。
0156デフォルトの名無しさん
NGNG> memset(&hoge, O, sizeof(hoge));
> ZeroMemory(&hoge, sizeof(hoge));
こんなコードを無意味にいれている C/C++ プログラムは、Javaよりも遅いです!
必要なところにだけ入れましょう! 念のためなんて入れていると極端に遅くなります(データの大きさが大きくなると)
0157デフォルトの名無しさん
NGNG0158115
NGNG・まず、>>157も皮肉ってるが、ここを読め。
http://www.y-adagio.com/public/standards/tr_javalang/4.doc.htm#10931
・大きくなると極端に遅くなる、というのはダウトだろう。
P3 600Mzで、10MBのゼロクリアに0.05秒だったぞ。
・アクションゲーム作ってるわけじゃないので、楽できるところで
わざわざクリア漏れのリスクは犯せない。
・速度向上のアプローチが間違ってる。小手先のテクニックじゃなくて、
パフォーマンスの全体的なプロファイリングをした上でボトルネックを探すべき。
実際、暗号化や署名生成といった処理が処理時間の大半を占めてるわけだし。
ゼロクリアによる性能悪化は誤差の範囲。
0159デフォルトの名無しさん
NGNGあなたの方が現実を知らなすぎ(笑)
0160デフォルトの名無しさん
NGNGある意味最重要のような気がするがな。
てかバイトコードの変換を考えると、似たような処理をする場合
CがJAVAより遅くなるって難しくねぇか?(´Д`)
Cのおかしな仕様の殆どは実行効率を高めるための制約だし。
>>159
>>158に禿同な漏れも現実を知らんことになるな。
どのように現実を知らないか詳細希望。
フツーに興味がある。
0161160
NGNGネイティブコードに変換したモンを保存しておき、
次回から変換済みの方で実行する手法による
反論はいらん。んなことができん環境もあるからな。
0162デフォルトの名無しさん
NGNG> 念のためなんて入れていると極端に遅くなります(データの大きさが大きくなると)
その後その巨大な構造体のメンバを埋めていくのにはすさまじい時間がかかりそうだな。
ゼロクリアにかかる時間が誤差に見えてくるぜ。
>>161
ネイティブに変換したところでゼロクリアしてる事実が無くなるわけじゃないから問題ないだろ。
0163デフォルトの名無しさん
NGNG実際にアクセスされたときになって初めて物理ページを割り当てるようなのがあるのかも。
漏れも(Winの)PAGE_GUARDの仕組み利用して、そういうの自前で作ったことある。
この場合、ゼロクリアすると、せっかくの親切設計が台無しになる。
まあ、そんな実装での話なぞ誰もしていないと思うが。w
0164デフォルトの名無しさん
NGNGそれを利用して過去のアプリのデータの残骸を吸い出す攻撃があるので
最近はセキュア指向で、そういう場合もゼロクリアが基本。
0165デフォルトの名無しさん
NGNGへーそうなんだ、ググッてみます。サンクスコ。
0166デフォルトの名無しさん
NGNGセキュアな情報のクリアには、ZeroMemory()ではなくSecureZeroMemory()を使いましょう。
Use this function instead of ZeroMemory when you want to ensure that your
data will be overwritten promptly, as the compiler can optimize a call to
ZeroMemory by removing it entirely. A call to SecureZeroMemory will not be
optimized.
スレタイに沿ってオープンソースの世界を眺めてみると、例えばOpenSSLだと単に0で埋めるんではなく、
OPENSSL_cleanse()ちゅうのを用意して、中では結構複雑な処理してる。
This can be used to solve two issues: 1) the removal of calls to memset()
by highly optimizing compilers, and 2) cleansing with other values than 0,
since those can be read through on certain media, for example a swap space
on disk.
0167デフォルトの名無しさん
NGNG0168デフォルトの名無しさん
NGNG0169デフォルトの名無しさん
NGNGhttp://www.microsoft.com/japan/msdn/columns/secure/secure10102002.asp
今までメモリ内の機密データをクリアするなんて考えもしなかったし、
memsetがコンパイラの最適化によって消されるなんてことも思いつかなかったなぁ・・・
ネタ振りをしてくれた >>66 氏に多謝!!
0170デフォルトの名無しさん
NGNGマシンってのもあるよね。
0171デフォルトの名無しさん
NGNGコレに書いてあることは?
安全策でつかいおわった後の領域を memset クリアしても、
コンパイラの最適化によって、memsetクリアのコードは無効になるってこと?
しかもクリアするようにするには、なんか最適化はずすようにしないといかんの?
めんどいね。まあ、そのコード書かないからどうでもいいけど
0172デフォルトの名無しさん
NGNGGUIの入力ウィジェットとかは、パスワードタイブの入力の場合
きちんと作業バッファをゼロクリアしてるのかな?
0173デフォルトの名無しさん
NGNGmemsetでクリアした領域はそのあと使ってないから、
そんな所を触るのは無駄と判断してそのコードは生成しないと。
関数の呼出をはしょっちゃうのは、最適化しすぎな気もするけどねえ。
0174デフォルトの名無しさん
NGNGmemsetみたいなプリミティブかつ標準提供な関数ぐらいだろうけどね・・。
MSのコンパイラは結構前から memsetとかは intrinsic,
埋め込み展開対象だから、そのへんが原因なのかな。
そういう意味では、std::fillなんかもまんまインライン展開だから最適化で消えるか。
0175デフォルトの名無しさん
NGNG0176デフォルトの名無しさん
NGNGnewの中にヒープ関数とZeroMemory()書くだけ?
0177デフォルトの名無しさん
NGNG見ると、VC++ だけ相手にしてりゃいい漏れがいかに楽なのか
(世のなかにクズなコンパイラがあふれてるか)がわかるよ。
0178デフォルトの名無しさん
NGNG0179デフォルトの名無しさん
NGNG0180デフォルトの名無しさん
NGNGその頃のCに対する認識は高級アセンブラ
どうでもいいんだが…
■ このスレッドは過去ログ倉庫に格納されています