我分配了大量緩衝區,然後將其分成多個大小的塊。這些尺寸以32開頭,然後每增加一個乘以2。將無符號整數舍入爲2的冪的序列
struct Node
{
Node* Next;
void* Data;
const unsigned Size;
};
Node* m_Buffers[16];
這意味着在m_Buffers[0]
緩衝器將大小爲32,並在m_Buffers[1]
緩衝器將大小爲64的等。
還有一個函數,它接收一個數字並返回一個指定數字可以取整的大小的緩衝區。
void * GetBuffer(unsigned size)
{
// ...
}
例如,如果我要求384所涉及的緩衝器然後我需要能夠圓,在512和從m_Buffers[4]
返回的緩衝器。
到目前爲止,我使用的是循環圍捕:
void * GetBuffer(unsigned size)
{
unsigned buffer_size = 32;
while (buffer_size < size)
{
buffer_size *= 2;
}
// ...
}
不過我很好奇,如果有圍捕,不涉及一個循環的更好的方法。而且,如果有辦法將舍入的數字轉換爲數組中的索引而不使用switch語句。
說實話,我甚至不確定標題是否正確。所以我爲此道歉。