当前位置:  开发笔记 > 编程语言 > 正文

用于计算循环缓冲区中剩余空间的简化算法?

如何解决《用于计算循环缓冲区中剩余空间的简化算法?》经验,为你挑选了2个好方法。

我想知道是否有一种更简单的(单一)方法来计算循环缓冲区中的剩余空间而不是这个?

int remaining = (end > start)
                ? end-start
                : bufferSize - start + end;

j_random_hac.. 8

如果您担心预测条件不佳会降低CPU管道的速度,您可以使用:

int remaining = (end - start) + (-((int) (end <= start)) & bufferSize);

但这可能是过早的优化(除非你真的把它确定为热点).坚持使用您当前的技术,这种技术更具可读性.



1> j_random_hac..:

如果您担心预测条件不佳会降低CPU管道的速度,您可以使用:

int remaining = (end - start) + (-((int) (end <= start)) & bufferSize);

但这可能是过早的优化(除非你真的把它确定为热点).坚持使用您当前的技术,这种技术更具可读性.



2> zaratustra..:

嗯...

int remaining = (end - start + bufferSize) % bufferSize;

13个令牌,我赢了吗?


这很简短,尽管在大多数体系结构上增加鸿沟会使您的版本变慢。
因此,使缓冲区大小为2的幂。
推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有