【发布时间】:2016-01-03 17:18:54
【问题描述】:
我分配了大缓冲区,然后分成多个大小的块。这些大小从 32 开始,然后每次增加乘以 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 语句的情况下将四舍五入的数字转换为数组中的索引。
老实说,我什至不确定标题是否正确。所以我为此道歉。
【问题讨论】: