环型缓冲区

2024-03-03 16:08
文章标签 缓冲区 环型

本文主要是介绍环型缓冲区,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

昨天英伟达的笔试有考到 环形缓冲区,用数组或链表实现都可以,要求写出代码实现

在网上找了下这个数组实现方式可以参考一下。

还有一题是判断大小端,这个题在面深信服的时候也有问到。

定义一个union

union biglittle {

int a;

short b ;

char c;

}

union biglittle x;

x.a=1;

if(x.c)  printf("little edian\n")

else printf("big edian\n");

大概是这个样子。

今天在<linux 0.01内核分析与操作系统设计----创造你自己的操作系统>看到了一个环型缓冲区的是实现,代码简单,实现了基本功能.环型缓冲区是数据通信程序中使用最为广泛的数据结构之一.

  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #define NMAX    8
  4. //环形缓冲区的初始化
  5. int iput=0;//环型缓冲区的当前写入位置
  6. int iget=0;//环型缓冲区的当前读出位置
  7. int n=0;//环型缓冲区元素总数量
  8. double buffer[NMAX];
  9. //环型缓冲区的地址编号计算函数,如果到达唤醒缓冲区的尾部,将饶回到头部。
  10. //缓型缓冲区的有效编号为:0 到 (NMAX-1)
  11. int addring(int i)
  12. {
  13.     return ((i+1)==NMAX) ? 0 : i+1;
  14. }
  15. //从环型缓冲区中取一个元素
  16. double get(void)
  17. {
  18.     int pos;
  19.     if(n>0)
  20.     {
  21.         pos=iget;
  22.         iget=addring(iget);
  23.         n--;
  24.         return buffer[pos];
  25.     }
  26.     else
  27.     {
  28.         printf("Buffer is empty/n");
  29.         return 0.0;
  30.     }
  31. }
  32. //向环型缓冲区中放入一个元素
  33. void put(double z)
  34. {
  35.     if(n<NMAX)
  36.     {
  37.         buffer[iput]=z;
  38.         iput=addring(iput);
  39.         n++;
  40.     }
  41.     else
  42.     {
  43.         printf("Buffer is full /n");
  44.     }
  45. }
  46. int main(int argc,char *argv[])
  47. {
  48.     char opera[5];
  49.     double z;
  50.     do
  51.     {
  52.         printf("Please input p|g|e?");
  53.         scanf("%s",&opera);
  54.         switch( tolower(opera[0]) )
  55.         {
  56.          case 'p'://put
  57.                 printf("Please input a double number?");
  58.                 scanf("%lf",&z);
  59.                 put(z);
  60.                 break;
  61.          case 'g'://get
  62.                 z=get();
  63.                 printf("8.2f from buffer/n",z);
  64.                 break;
  65.          case 'e':
  66.                 printf("End /n");
  67.                 break;
  68.          default:
  69.                  printf("%s-Operation command error! /n",opera);
  70.                  break;
  71.         }
  72.     }
  73.     while(opera[0]!='e');
  74.  return 0;
  75. }

这个程序最让我学习的地方就是do{}while()的结构.

这篇关于环型缓冲区的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/770146

相关文章

【0324】Postgres内核 Shared Buffer Access Rules (共享缓冲区访问规则)说明

0. 章节内容 1. 共享磁盘缓冲区访问机制 (shared disk buffers) 共享磁盘缓冲区有两套独立的访问控制机制:引用计数(a/k/a pin 计数)和缓冲区内容锁。(实际上,还有第三级访问控制:在访问任何属于某个关系表的页面之前,必须持有该关系表的适当类型的锁。这里不讨论关系级锁。) Pins 在对缓冲区做任何操作之前,必须“对缓冲区pin”(即增加其引用计数, re

工作集、granule、缓冲区、缓冲池概念及关系?

工作集、granule、缓冲区、缓冲池概念及关系? granule:为了让内存在db_chache_size和shared_pool_size之间高效的移动,oracle在9i重构SGA,使用固定大小的内存块即为granule。这个参数就是为什么当你分配给shared pool值的时候,为什么有时候比你分配的值要大一点,但是granule的整数倍。 缓冲区:内存存放数据的地方,类似于数

圆形缓冲区-MapReduce中的

这篇文章来自一个读者在面试过程中的一个问题,Hadoop在shuffle过程中使用了一个数据结构-环形缓冲区。 环形队列是在实际编程极为有用的数据结构,它是一个首尾相连的FIFO的数据结构,采用数组的线性空间,数据组织简单。能很快知道队列是否满为空。能以很快速度的来存取数据。 因为有简单高效的原因,甚至在硬件都实现了环形队列。 环形队列广泛用于网络数据收发,和不同程序间数据交换(比如内核与应用

Kafka【五】Buffer Cache (缓冲区缓存)、Page Cache (页缓存)和零拷贝技术

【1】Buffer Cache (缓冲区缓存) 在Linux操作系统中,Buffer Cache(缓冲区缓存)是内核用来优化对块设备(如磁盘)读写操作的一种机制(故而有一种说法叫做块缓存)。尽管在较新的Linux内核版本中,Buffer Cache和Page Cache已经被整合在一起,但在理解历史背景和功能时,了解Buffer Cache仍然很有帮助。 Buffer Cache 的历史和定义

两个月冲刺软考——概念+求已知内存按字节编址从(A)…到(B)…的存储容量+求采用单/双缓冲区需要花费的时间计算 类型题目讲解

1.四个周期的区别与联系 时钟周期:也称为CPU周期或机器周期,是CPU操作的基本时间单位。 指令周期:是指CPU执行一条指令所需的全部时间。一个指令周期通常由多个时钟周期组成,因为执行一条指令可能需要多个步骤,如取指令、译码、执行、访存和写回等。 总线周期:总线周期是数据在计算机总线上传输所需的时间。 它涉及CPU与其他系统组件(如内存、输入/输出设备)之间的数据传输。一个总线周期可能包括

一个免锁环形缓冲区的实现

面是串口DMA+环形缓冲区的实现,数据收发是异步的,不需要死等。 关于环形缓冲区参考: 1 2 http://blog.csdn.net/jieffantfyan/article/details/53572103 实现原理 程序是在串口中断收发方式的基础上设计的,应用层通过环形缓冲区进行串口数据读取,环形缓冲区作为一级缓存,增加DMA作为二级缓存。相对中断方式这种设计可以减少串口进入中断的次数,

golang基础-终端读(Scanln\bufio)、bufio文件读、、ioutil读读压缩、缓冲区读写、文件写入、文件拷贝

终端读写Scanln、Sscanfbufio带缓冲区的读bufio文件读(1)bufio文件读(2)通过ioutil实现读读取压缩文件文件写入文件拷贝 终端读写Scanln、Sscanf package mainimport ("fmt")var (firstName, lastName, s stringi intf

文章解读与仿真程序复现思路——电网技术@EI\CSCD\北大核心《基于双缓冲区生成对抗模仿学习的电力系统实时安全约束经济调度》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python

Linux 用户缓冲区

1. 文件描述符的分配规则 我们知道Linux进程默认情况下会有3个缺省打开的文件描述符,分别是标准输入stdin--0, 标准输出stdout--1, 标准错误stderr--2。0,1,2对应的物理设备一般是:键盘,显示器,显示器.接下来我们来研究文件描述符的分配规则,代码如下。 #include<stdio.h>#include<sys/types.h>#include<sys/st

[Meachines] [Insane] Bankrobber XSS-MDOG+SQLI+XSRF+Local-RCE+Bankv2转账模拟应用缓冲区溢出

信息收集 IP AddressOpening Ports10.10.10.154TCP:80,443,445,3306 $ nmap -p- 10.10.10.154 --min-rate 1000 -sC -sV -Pn PORT STATE SERVICE VERSION 80