完備辞書そのものの説明は, ネット検索か,
高速文字列解析の世界<Amazon>で確認してください.
ビット列$B[0,n]\ B[i]\in\{0,1\}$
について, 以下の操作を実現する.
$access(B,i)\ B[i]$を返す
$rank_{b}(B,i)\ B[0,i)$中の$b\in\{0,1\}$の数を返す
$select_{b}(B,i)\ B$中の$i+1$番目に出現した$b\in\{0,1\}$の位置を返す
2016年7月29日金曜日
population count
32bitのpopulation count
1のビットを数え上げる
コンパイラ組み込み関数を使わない場合,
1のビットを数え上げる
コンパイラ組み込み関数を使わない場合,
inline u32 population_count(u32 v) { v = (v & 0x55555555U) + ((v>>1) & 0x55555555U); v = (v & 0x33333333U) + ((v>>2) & 0x33333333U); v = (v & 0x0F0F0F0FU) + ((v>>4) & 0x0F0F0F0FU); v = (v & 0x00FF00FFU) + ((v>>8) & 0x00FF00FFU); return (v & 0x0000FFFFU) + ((v>>16) & 0x0000FFFFU); }gccの組み込み関数,
int __builtin_popcount(unsigned int x)VCの組み込み関数,
unsigned int __popcnt(unsigned int value)
2016年7月8日金曜日
C#クロージャのUnity3Dにおけるコストについて
前回に引き続きクロージャです.
クロージャを実現するために, コンパイラは裏側でクラスを作成します.
もしスマートフォン向けのアプリケーションを開発しているのならば,
これだけでも高いコストを支払っています.
かなり強引な例ですが, 以下のようなコードの場合を考えます.
Destroyボタンを押してから, Unloadボタンを押してもテクスチャは解放されません.
Clearボタンを押してから, Unloadボタンを押すことで解放されます.
クラスはどこかから参照されているかぎり, ガーベージコレクタによって削除されません.
明らかにLoaderの実装に欠点がありますが,
texture変数は, コード上ではスコープから外れて参照が切れているように見えてしまっている、
ことも問題です.
クロージャを実現するために, コンパイラは裏側でクラスを作成します.
もしスマートフォン向けのアプリケーションを開発しているのならば,
これだけでも高いコストを支払っています.
かなり強引な例ですが, 以下のようなコードの場合を考えます.
Destroyボタンを押してから, Unloadボタンを押してもテクスチャは解放されません.
Clearボタンを押してから, Unloadボタンを押すことで解放されます.
クラスはどこかから参照されているかぎり, ガーベージコレクタによって削除されません.
明らかにLoaderの実装に欠点がありますが,
texture変数は, コード上ではスコープから外れて参照が切れているように見えてしまっている、
ことも問題です.
登録:
投稿 (Atom)