私は自分のプログラム用に小さなスラブ アロケーターを作成していますが、ロック メカニズムを備えたリストを使用する代わりに、IBM によるロックレス ヒープに関する論文を読んだ後、そのようなものを実装することにしました。ただし、どの GCC 組み込み (ffs/ffz/ctz など) が最も効率的で、その理由は?
私の最も可能性の高いターゲットは、CLZ
ハードウェア命令を備えた ARMv7 および ARMv6 プロセッサです。
私は次のようなものを思いついた
uint32_t tmp;
uint32_t new_bits;
uint32_t old_bits;
do {
old_bits = slab->bitmap;
tmp = <function>(old_bitmap);
new_bits = old_bits | (1 << tmp);
} while(cpu_atomic_cmpxchg(&slab->bitmap, old_bits, new_bits) != OS_OKAY);
return ((void *) slab->start + (tmp * slab->blksize))