我正在实现一个循环缓冲区来存储固定大小的数据结构,如队列.这个循环缓冲区初始化有三个参数: –
/* * Initialize the ring buffer. * @capacity Max capacity of ring buffer. * @item_size Fixed size of item that will be put in this circular buffer. * @item_cleaner Clean callback,NULL if cleanup not required. */ ringbuf* ringbuf_create(size_t capacity,size_t item_size,clean_up_cb item_cleaner)
我的循环缓冲区始终处于包装模式,这意味着当新项目放入完整循环缓冲区时,始终会替换最后一项.因为,动态分配的对象也可以放入此缓冲区,因此,循环缓冲区会保留引用清理回调函数,以便在替换或删除项目时释放它们.但与此同时,此回调函数也可以为NULL(不需要清理时).在我的代码中的任何地方,我都有这样的陈述: –
if(buffer->callback != NULL) buffer->callback(item);
现在,为了防止这些if语句,我在用户不提供任何回调函数时放入空存根函数.如果回调函数为NULL,这会阻止我每次检查.
使用这种方法,我的代码看起来很整洁.但我不确定,哪一个更快?在汇编级别,空函数调用和if语句如何在速度方面相关?它们是等价的吗?