标签: circular-buffer

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

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

int remaining = (end > start)
                ? end-start
                : bufferSize - start + end;
Run Code Online (Sandbox Code Playgroud)

c++ circular-buffer

7
推荐指数
3
解决办法
6282
查看次数

Flash中的循环缓冲区

我需要将不同长度的项目存储在闪存芯片中的循环队列中.每个项目都有它的封装,所以我可以弄清楚它有多大以及下一个项目的开始位置.当缓冲区中有足够的项目时,它将换行到开头.

在闪存芯片中存储循环队列的好方法是什么?

我想存储成千上万件物品的可能性.所以从头开始读到缓冲区的末尾并不理想,因为搜索到最后需要时间.

此外,因为它是圆形的,我需要能够区分第一个项目和最后一个项目.

最后一个问题是它存储在闪存中,因此擦除每个块都非常耗时,并且每个块只能执行一定次数.

embedded queue circular-buffer flash-memory

7
推荐指数
1
解决办法
4470
查看次数

在C中寻找正确的环形缓冲区实现

我在C中寻找具有以下特征的环形缓冲区实现(或伪代码):

  • 多生产者单一消费模式(MPSC)
  • 消费者阻止空
  • 生产者完全阻止
  • 无锁(我期望高争用)

到目前为止,我一直只使用SPSC缓冲区 - 每个生产者一个 - 但我想避免消费者不断旋转以检查所有输入缓冲区的新数据(也许是为了摆脱我的一些编组线程)系统).

我在Intel机器上开发Linux.

c multithreading producer-consumer circular-buffer lock-free

7
推荐指数
1
解决办法
1万
查看次数

如何找到按字典顺序排列的最小字符串旋转数?

如何找到按字典顺序排列的最小字符串旋转次数

例如:

S = abab, N = 2
S = abca, N = 1
S = aaaa, N = 4

我试过Duval的算法,它的工作时间很长.字符串长度为100000000个字符.

string algorithm circular-buffer

7
推荐指数
1
解决办法
2174
查看次数

如何在窗口函数中使用环形数据结构

我有数据以环形结构(或循环缓冲区)排列,也就是说它可以表示为循环的序列:...- 1-2-3-4-5-1-2-3 -... .看到这张图片,了解一个5部分的戒指:

在此输入图像描述

我想创建一个窗口查询,可以将滞后和铅项目组合成一个三点数组,但我无法弄清楚.例如,在5部分环的第1部分,滞后/超前序列是5-1-2,或者部分4是3-4-5.

这是一个两个环的示例表,它们具有不同数量的部件(每个环总是多于三个):

create table rp (ring int, part int);
insert into rp(ring, part) values(1, generate_series(1, 5));
insert into rp(ring, part) values(2, generate_series(1, 7));
Run Code Online (Sandbox Code Playgroud)

这是一个几乎成功的查询:

SELECT ring, part, array[
    lag(part, 1, NULL) over (partition by ring),
    part,
    lead(part, 1, 1) over (partition by ring)
    ] AS neighbours
FROM rp;

 ring | part | neighbours
------+------+------------
    1 |    1 | {NULL,1,2}
    1 |    2 | {1,2,3}
    1 |    3 | {2,3,4}
    1 |    4 | {3,4,5} …
Run Code Online (Sandbox Code Playgroud)

sql postgresql circular-buffer circular-list window-functions

7
推荐指数
1
解决办法
492
查看次数

环形缓冲区和循环链接列表有什么区别?

环形缓冲区和循环链接列表有什么区别?

环形缓冲区服务于循环链接列表的目的是什么,反之亦然?

circular-buffer circular-list

7
推荐指数
1
解决办法
3942
查看次数

C++ std :: deque实现:为什么不使用循环缓冲区?

我对deque的实现进行了一些搜索.根据这篇文章,deque使用向量的向量.我知道在开始和结束时推送应该是恒定的时间,并且还需要随机访问.我认为循环缓冲区满足所有这些要求,并且更加简单.那么为什么不使用循环缓冲区?

我还发现了增强循环缓冲区.它与deque相比如何?


编辑:好的,所以它与迭代器失效规则有关.它指出:

所有迭代器和引用都是无效的,除非插入的成员位于双端队列的末尾(前面或后面)(在这种情况下,所有迭代器都无效,但对元素的引用不受影响)

我的理解是重载像iter ++这样的运算符,迭代器必须拥有一个指向节点映射的指针和一个指向块的指针,所以如果重新分配节点映射,迭代器就会失效.但由于数据从未移动,因此引用仍然有效.

c++ stl circular-buffer deque

7
推荐指数
1
解决办法
3890
查看次数

Windows环缓冲区无需复制

Ring Buffer的维基百科条目中,有一个示例代码显示UNIX系统的hack,其中相邻虚拟内存到一块内存映射到相同的phbysical内存,从而实现一个环形缓冲区,而不需要任何memcpy等.我想知道如果在Windows中有类似的东西吗?

谢谢,弗雷泽

c memory windows circular-buffer

6
推荐指数
2
解决办法
2541
查看次数

在小型ARM微控制器中实现uart接收缓冲区的正确方法?

我正在寻找一个小型应用程序的接收缓冲区的想法,该应用程序通过rs485处理921.6Kbaud的15字节数据包.我正在考虑使用循环缓冲区作为UART ISR和main之间的接口.因为它是一个我想放的微处理器

while (uartindex!=localindex) { do stuff } 
Run Code Online (Sandbox Code Playgroud)

在里面

while (;;) {do forever} 
Run Code Online (Sandbox Code Playgroud)

部分主要但我被告知这是不可接受的.

人们如何在类似情况下处理他们的蠢货?

arm circular-buffer uart

6
推荐指数
2
解决办法
1万
查看次数

将数据读入循环缓冲区

是否有可能使用boost::circular_bufferboost::asio

具体来说,我想读取固定数量的字节boost::asio::async_write并将它们直接存储在循环缓冲区中而不进行复制。

一些示例代码会非常好!

c++ boost network-programming circular-buffer boost-asio

6
推荐指数
1
解决办法
2556
查看次数