我需要跟踪64K项目的免费/使用状态。我的计划是使用import React, { Component } from "react";
import * as Animated from "animated/lib/targets/react-dom";
const AnimatedWrapper = WrappedComponent => class AnimatedWrapper
extends Component {
constructor(props) {
super(props);
}
componentDidMount() {
console.log('mount');
}
componentWillAppear() {
console.log('appear');
}
componentWillEnter() {
console.log('enter');
}
componentWillLeave() {
console.log('leave');
}
render() {
return (
<Animated.div className="animated-page-wrapper">
</Animated.div>
);
}
};
export default AnimatedWrapper;
代表项目的每个位。我会在项目正在使用时设置相应的位,并在空闲时重置。
为了找到一个空闲插槽,我可以逐个扫描数组并找到一个未设置的位,这是天真的和最慢的。一级优化是跳过已满的单词。即值为max_int(uint64_t array[1000]
)的项目。
我正在寻找进一步优化此功能的方法,以便我可以在最少的操作数量中找到空闲插槽。
谢谢!
答案 0 :(得分:1)
由于数字中有64位,扫描 log 2 64 = 6次就足够了:
int findZeroBit(uint64_t n){
int index = 0;
n = ~n;
if (n & 0xFFFFFFFF00000000) index += 32;
if (n & 0xFFFF0000FFFF0000) index += 16;
if (n & 0xFF00FF00FF00FF00) index += 8;
if (n & 0xF0F0F0F0F0F0F0F0) index += 4;
if (n & 0xCCCCCCCCCCCCCCCC) index += 2;
if (n & 0xAAAAAAAAAAAAAAAA) index += 1;
return index;
}
但是只会返回一位。