1. 程式人生 > >swoole原始碼解析之Buffer的recycle操作

swoole原始碼解析之Buffer的recycle操作

swoole_buffer提供的recycle操作用於回收緩衝中已經廢棄的記憶體。

swoole_buffer->recycle();

此方法能夠在不清空緩衝區和使用 swoole_buffer->clear() 的情況下,回收通過 swoole_buffer->substr() 移除但仍存在的部分記憶體空間。

下面我們看下其實現過程。

static PHP_METHOD(swoole_buffer, recycle)
{
    swString *buffer = swoole_get_object(getThis());

    swoole_buffer_recycle(buffer);

    zend_update_property_long(swoole_buffer_class_entry_ptr, getThis(), ZEND_STRL("length"), buffer->length TSRMLS_CC);
}
static void swoole_buffer_recycle(swString *buffer)
{
    if (buffer->offset == 0)
    {
        return;
    }

    long length;
    length = buffer->length - buffer->offset;
    if (length > 0)
    {
        memmove(buffer->str, buffer->str + buffer->offset, length);
    }

    buffer->offset = 0;
    buffer->length = length;
}