Я работаю над приложением для мобильного телефона и вижу потенциальную возможность для повышения производительности. Во всем коде я использую массивы bool, чтобы отслеживать, какие объекты активны. Например, я бы проверил, активен ли i-й MyObject, выполнив следующее:
if(activeMyObjects[i]){ // it's active so do something... }
Поскольку максимальное количество моих объектов находится в диапазоне [5,20], я думаю, что я могу заменить массив bool activeMyObjects набором битов в виде единого целого числа «activeMyObjects». Тогда я могу сделать следующее:
// check if ith object is active
if(activeMyObjects & (1 << i)){ // it's active... }
// activate the ith object
activeMyObjects |= (1 << i);
// reset all myObjects to inactive
activeMyObjects = 0;
// and so on...
Есть ли случаи, когда переключение на набор битов может фактически ухудшить производительность? Я использую язык c. Также обратите внимание, что этот код вызывается очень часто (частота в диапазоне 30 - 60 Гц).
Edit:
Еще одна информация: у наборов битов есть еще одно преимущество: я могу легко определить, активен ли вообще какой-либо из объектов. поэтому я могу пропустить цикл, где я проверяю каждый элемент, чтобы увидеть, активен ли он, сначала проверив if (activeMyObjects). когда я использую массив, это сложнее ... мой подход заключался в том, чтобы иметь дополнительный счетчик int, который увеличивается всякий раз, когда MyObject активируется, и уменьшается всякий раз, когда MyObject деактивируется ... таким образом, я просто проверю, если (activeMyObjectsCount> 0) перед циклом, где я проверяю каждый из них.