タグ

cとbinaryに関するjjzakのブックマーク (2)

  • 再入不可能な関数を C で実装する - いやなブログ

    再入不可能な関数を C で実装する 一度実行したら二度と中身を実行できなくなる再入不可能な関数を C で実装してみます。通常、このような関数はシングルトンなどの静的なデータの初期化に使いますが、ここではデータについては考えないことにします。 static 変数をフラグに使う まずは最も単純な方法から見ていきます。次の関数は static 変数をフラグに使って再入を防いでいます。厳密に言えば関数そのものには入ってしまっていますが、ここで気にしないことにします。 void once(void) { static int entered; // 最初は 0 if (entered == 1) { // すでに入ったことがある場合は return; // すぐ出る } entered = 1; // 初回の場合のみ、何かを実行する } この方法はシングルスレッドのプログラムではうまく動きますが、マ

  • memcpy 最適化 - kazuhoのメモ置き場

    バイト単位でコピーするアホなコードの方が、勝手にベクトル化される分、gcc 内蔵のヤツより最大3倍高速なんだってwww memcpy() compiled with vectorizing compilers All current compilers for linux should support SSE2 auto-vectorization with #include <string.h> void *(memcpy)(void *restrict b, const void *restrict a, size_t n){ char *s1 = b; const char *s2 = a; for(; 0<n; --n)*s1++ = *s2++; return b; }(中略) x86-64 gcc memcpy() (中略) Linking in a user-compiled

    memcpy 最適化 - kazuhoのメモ置き場
  • 1