请问一下,对于ByteBuffer makeSpace函数会经常把数据往前移动,也就是说拷贝,这个会比较费吗?
asynchronoust opened this issue · comments
asynchronous commented
上图中的
void makeSpace(size_t len)
{
//kCheapPrepend为保留的空间
if (writableBytes() + prependableBytes() < len + kCheapPrepend)
{
// FIXME: move readable data
m_buffer.resize(m_writerIndex + len);
}
else
{
// move readable data to the front, make space inside buffer
//assert(kCheapPrepend < readerIndex_);
if (kCheapPrepend >= m_readerIndex)
return;
size_t readable = readableBytes();
std::copy(begin() + m_readerIndex,
begin() + m_writerIndex,
begin() + kCheapPrepend);
m_readerIndex = kCheapPrepend;
m_writerIndex = m_readerIndex + readable;
}
}
应该在收包的过程中,这种copy数据应该是很常发生的