swoole原始碼解析之Buffer的recycle操作
阿新 • • 發佈:2018-12-13
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; }