1
我正在爲我的程序編寫一個小的slab分配器,但不是使用帶鎖定機制的列表,而是在IBM讀取無鎖堆上的一篇文章後,我決定實施類似的東西。然而,哪些GCC內在(ffs/ffz/ctz等)將是最有效的,爲什麼?從右邊的一個單詞中找到第一個零位(LSB)
我最有可能的目標將是ARMv7和ARMv6處理器與CLZ
硬件指令。
我的東西像川方
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))
但不會計數倒置位圖的「前導」零給我第一個從左邊的未置位? OOPS,我錯誤的想從正確的角度改變問題。 – sgupta
行 - 已更新。 –
謝謝,但是有沒有什麼危害我應該知道,比如位圖是零還是未定義的情況? – sgupta