社区
C语言
帖子详情
求先入先出(FIFO)缓冲区算法
microchu
2005-06-30 06:34:13
缓冲区大小10M,用来存放二进制数据,缓冲区的使用遵循以下规则
1)先入先出
2)取出后的空间视为空,可以再次存放数据
请写出存取接口函数:
1)存数据函数要求第一个参数为要存入数据的大小,第二个参数为存入数据的指针
2) 取数据函数要求第一个参数为要取出数据的大小,第二个参数为存放取出数据的指针
请各位先写写看,晚上回来跟大家讨论
...全文
633
7
打赏
收藏
求先入先出(FIFO)缓冲区算法
缓冲区大小10M,用来存放二进制数据,缓冲区的使用遵循以下规则 1)先入先出 2)取出后的空间视为空,可以再次存放数据 请写出存取接口函数: 1)存数据函数要求第一个参数为要存入数据的大小,第二个参数为存入数据的指针 2) 取数据函数要求第一个参数为要取出数据的大小,第二个参数为存放取出数据的指针 请各位先写写看,晚上回来跟大家讨论
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
summercloth
2005-07-01
打赏
举报
回复
#define BUFFER_SIZE (unsigned long )10000000
unsigned char BUFFER[BUFFER_SIZE] = {0};
unsigned char *pBufferFront = (unsigned char *)BUFFER;
unsigned char *pBuffereEnd = (unsigned char *)BUFFER +BUFFER_SIZE -1;
unsigned char *pBufferCur = pBufferFront;
unsigned char Buffer_Put(unsigned long put_size,unsigned char *put_pointer)
{
unsigned long current_size;
unsigned long count;
if(put_size > (pBufferCur - pBufferFront))
return FALSE;
for(count = 0;count<put_size;count++)
*pBufferCur-- = *put_pointer++;
}
unsigned char Buffer_Get(unsigned long get_size,unsigned char *get_pointer)
{
unsigned long count;
unsigned char *move_pointer = pBuffereEnd;
if(get_size>BUFFER_SIZE- pBufferCur)
return FALSE;
for(count = 0;count<get_size;count++)
*get_pointer++ = *move_pointer--;
for(count = 0,pBufferCur = pBuffereEnd;count < move_pointer - pBufferCur;count++)
*pBufferCur-- = *move_pointer--;
return TRUE;
}
look01
2005-07-01
打赏
举报
回复
待会帮你看看,呵呵!
microchu
2005-06-30
打赏
举报
回复
这个题目,我觉得看上去像是循环队列,但是不能用链表实现,或者说用链表实现不简单。
因为循环队列链表算法是单个存入或取出对象,本例则是一次存取指定Size大小的数据量,
在边界上存取数据是本例的一个难点。
boxban
2005-06-30
打赏
举报
回复
#include <iostream>
#include <cstdlib>
#include <cassert>
using namespace std;
class MyBuf
{
public:
MyBuf(int n = 10 * 1024 * 1024)
{
assert (n > 0);
m_buf = new char[n];
m_head = m_buf;
m_size = 0;
m_capacity = n;
}
~MyBuf() { delete []m_buf;}
public:
int write(int size, const char* data);
int read(int size, char* buf);
private:
const char* getBufferEnd() const { return (m_buf + m_capacity); }
private:
char* m_buf;
char* m_head;
int m_size;
int m_capacity;
};
//return size if OK. -1 means overflow.
int MyBuf::write(int size, const char* data)
{
assert(size > 0);
if ((size + m_size) > m_capacity) return -1;
int tailBytes = getBufferEnd() - (m_head + m_size);
if (tailBytes >= size){
memcpy(m_head + m_size, data, size);
}else{
if (tailBytes > 0){
memcpy(m_head + m_size, data, tailBytes);
memcpy(m_buf, data + tailBytes, size - tailBytes);
}else{
memcpy(m_buf - tailBytes, data, size);
}
}
m_size += size;
return size;
}
int MyBuf::read(int size, char* buf)
{
assert(size > 0);
if (size > m_size) return -1;
int n = getBufferEnd() - m_head;
if (n >= size){
memcpy(buf, m_head, size);
m_head += size;
}else{
memcpy(buf, m_head, n);
memcpy(buf + n, m_buf, size - n);
m_head = m_buf + size - n;
}
m_size -= size;
if (m_size == 0) m_head = m_buf;
return size;
}
int main()
{
MyBuf buf(12);
char tmp[100];
buf.write("abchello", (int)sizeof("abchello") - 1);
buf.read(tmp, 3);
tmp[3] = 0;
cout << tmp << endl;
buf.write(" world!", (int)sizeof(" world!") - 1);
buf.read(tmp, 12);
tmp[12] = 0;
cout << tmp << endl;
return 0;
}
ericqxg007
2005-06-30
打赏
举报
回复
刚开始看题目还以为是什么东西 仔细看还是数据结构的东西
楼主 这个题目就是要你建立队列 而且使用线性实现的
megaboy
2005-06-30
打赏
举报
回复
这就是队列嘛,一个FIFO的动态链表就得了。
microchu
2005-06-30
打赏
举报
回复
顶,还有没有更好的
ARM平台
FIFO
缓冲区
设计与实现
在本章节中,我们深入探讨了
FIFO
数据结构的写入与读取机制。详细介绍了写入和读取操作的流程、策略以及如何处理可能出现的冲突。通过代码块展示了如何实现这些操作,并且对关键步骤进行了逻辑分析和参数说明。这些机制对于保障
FIFO
数据结构的高效运行至关重要。
FIFO
(First-In-First-Out)是一种先进
先出
的数据结构,广泛应用于内存缓冲、任务调度等领域。在
FIFO
的使用过程中,能够准确检测其空满状态对系统的稳定运行至关重要。
308-置换策略
FIFO
算法
的实现
置换策略
FIFO
算法
的实现 先进
先出
(
FIFO
)
FIFO
策略把分配给进程的页框看做是一个循环
缓冲区
,按循环方式移动页。 它所需要的只是一个指针,这个指针在该进程的页框中循环。 因此这是一种实现起来最简单的页面置换策略。除了它的简单性,这种选择方法所隐含的逻辑是置换驻留在内存中时间最长的页:一个在很久以前取入内存的页,到现在可能已经不会再用到了。这个推断常常是错误的,因为经常会出现一部分程序或数据在整个程序的生命周期中使用频率都很高的情况,如果使用
FIFO
算法
,则这些页会反复地需要被换入换出。 下图的例子,
android开发常用的缓存策略详解(2)- 先进
先出
(
FIFO
)置换
算法
那么什么是
FIFO
算法
呢?这是最早出现的置换
算法
。该
算法
总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该
算法
实现简单,只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。但该
算法
与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,比如,含有全局变量、常用函数、例程等的页面,
FIFO
算法
并不能保证这些页面
fifo
算法
_页面置换
算法
五大盘点
页面置换
算法
:地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换
算法
。01最佳置换
算法
(OPT)从主存中移出永远不再需要的页面,如无这样的页面存在,则选择最长时间不需要访问的页面。于所选择的被淘汰页面将是...
先进
先出
(
FIFO
)页面置换
算法
C语言实现、最近最久未使用(LRU)页面置换
算法
C语言实现
页面置换
算法
C语言实现(先进
先出
FIFO
、最近最久未使用LRU C语言实现)
C语言
70,036
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章