草庐IT

缓冲池

全部标签

c++ - 内存池和缓冲区 C++

我有几个关于缓冲区和内存池的问题,我想得到解答。假设我有一个服务器,每秒发送和接收~50-100+条消息。所有消息都有各种大小。您将如何着手充分利用此处的内存管理?我最初的计划是使用固定大小的缓冲区节点,并将它们合并在一起,例如:structbuffer{uint8_tdata[512];uint32_tend;buffer*next;}buffer*b=pool_get_new_buffer();因此,当发送一条消息时,我会根据大小创建一个或多个缓冲区并将它们链接在一起。这样我就不用担心池中的碎片了。(或者至少我是这么认为的)。但是在小消息上,这是浪费空间。但是看的越来越多,上网查代

c++ - 为什么建议使用多个像素缓冲区对象。肯定是多余的?

This当有人询问OpenGL中的视频流纹理时,通常会引用这篇文章。它说:Tomaximizethestreamingtransferperformance,youmayusemultiplepixelbufferobjects.Thediagramshowsthat2PBOsareusedsimultaneously;glTexSubImage2D()copiesthepixeldatafromaPBOwhilethetexturesourceisbeingwrittentotheotherPBO.Fornthframe,PBO1isusedforglTexSubImage2D()a

c++ - boost::asio::buffer:获取缓冲区大小并防止缓冲区溢出?

我有以下两个发送和接收数据包的函数。voidsend(std::stringprotocol){char*request=newchar[protocol.size()+1];request[protocol.size()]=0;memcpy(request,protocol.c_str(),protocol.size());request_length=std::strlen(request);boost::asio::write(s,boost::asio::buffer(request,request_length));}voidreceive(){charreply[max_l

c++ - 将 char 数组缓冲区转换为字符串的好方法?

我对C++比较陌生。最近的作业要求我将大量字符缓冲区(从结构/套接字等)转换为字符串。我一直在使用以下变体,但它们看起来很尴尬。有没有更好的方法来做这种事情?#include#includeusingstd::string;usingstd::cout;usingstd::endl;char*bufferToCString(char*buff,intbuffSize,char*str){memset(str,'\0',buffSize+1);return(strncpy(str,buff,buffSize));}string&bufferToString(char*buffer,int

java - 缓冲区溢出 (vs) 缓冲区溢出 (vs) 堆栈溢出

这个问题在这里已经有了答案:关闭13年前。PossibleDuplicate:Whatisthedifferencebetweenastackoverflowandbufferoverflow?缓冲区溢出和缓冲区溢出有什么区别?缓冲区溢出和堆栈溢出有什么区别?请包括代码示例。我查看了维基百科中的术语,但无法与C或C++或Java中的编程相匹配。

c++ - 覆盖最旧数据的 C/C++ 无锁(或非阻塞)环形缓冲区?

我正在尝试找到一种方法来制作无锁或非阻塞的方法来为单个消费者/单个消费者制作环形缓冲区,该缓冲区将覆盖缓冲区中最旧的数据。我读过很多无锁算法,这些算法在缓冲区已满时“返回false”时起作用——即,不要添加;但我什至找不到伪代码来讨论当你需要覆盖最旧的数据时如何做。我正在使用GCC4.1.2(工作限制,我无法升级版本...)并且我有Boost库,过去我制作了自己的Atomic变量类型接近即将到来的规范(它并不完美,但它是线程安全的并且可以满足我的需要)。当我想到它时,我认为使用这些原子应该真正解决这个问题。关于我在想什么的一些粗略的伪代码:templateclassRingBuffer

c++ - 从内存缓冲区处理视频流

我需要从专有网络协议(protocol)(我已经知道该怎么做)解析视频流(mpegts),然后我想使用OpenCV将视频流处理成帧。我知道如何从文件或标准URL使用cv::VideoCapture,但我想将OpenCV设置为从内存中的缓冲区读取,我可以在需要时存储视频流数据。有没有办法设置回调方法(或任何其他界面)以便我仍然可以使用cv::VideoCapture对象?有没有更好的方法来完成处理视频而不将其写到文件然后重新读取它。如果这是更好的选择,我也愿意直接使用FFMPEG。如果需要,我想我可以将AVFrames转换为Mat。 最佳答案

c++ - 为什么我们必须在渲染过程中清除 OpenGL 中的深度缓冲区?

我试图运行一个OpenGL代码,它没有在glClear()中清除GL_DEPTH_BUFFER_BIT,因此我无法渲染我的场景。我添加了这一点,场景就渲染好了。为什么需要使用这个清除位?我可能知道这样做的原因,清除之前GPU使用的深度缓冲区值,但我只是想确认一下。 最佳答案 深度缓冲区保存场景中像素的“深度”。当OpenGL渲染您的几何图形时,每个片段(像素)都会与该点的深度缓冲区值进行比较。如果该片段的z值低于缓冲区中的值,它将成为新的最低值,因此成为要渲染的像素。如果不是,请不要渲染它-有更近的东西在阻挡它。这就是它的要点-您可

【Linux】语言层面缓冲区的刷新问题以及简易模拟实现

文章目录前言一、缓冲区刷新方法分类a.无缓冲--直接刷新b.行缓冲--不刷新,直到碰到\n才刷新c.全缓冲--缓冲区满了才刷新二、缓冲区的常见刷新问题1.问题2.刷新本质三、模拟实现1.Mystdio.h2.Mystdio.c3.main.c前言我们接下来要谈论的是我们语言层面的缓冲区(C,C++之类的),不是我们操作系统内核里面自带的缓冲区,我们每次在打开一个文件的时候,以C语言为例子,C语言会为我们所打开的这个文件分配一块缓冲区,用来缓存我们读写的数据`,这个缓冲区会被放在我们创建的FILE的结构体里面,里面存放着缓冲区的字段和维护信息一、缓冲区刷新方法分类a.无缓冲–直接刷新b.行缓冲–

c++ - 流缓冲区之间的 block 级数据复制

我想在std::streambuf之间高效复制数据实例。也就是说,我想在它们之间铲出数据block,而不是逐个字符地进行复制。例如,这不是我要找的:stringbufin{ios_base::in};stringbufout{ios_base::out};copy(istreambuf_iterator{in},istreambuf_iterator{},ostreambuf_iterator{out});这里有语法糖,还有更多的错误检查:ostreamos{&out};os这是operator*)的一个实现片段在我的标准库中(MacOSX,XCode7):typedefistream