分析用于循环缓冲区实现的堆或堆栈形式的内存分配

时间:2019-01-30 09:20:13

标签: c++ buffer heap-memory circular-buffer stack-memory

我正在尝试使用第三方编写的环形缓冲区实现来了解内存分配。

我提到了两个免费的环形缓冲区实现:

  1. https://github.com/fbergama/MTCircularBuffer
  2. https://github.com/wizard97/Embedded_RingBuf_CPP

我试图在Ubuntu 16.04 PC上的上述库中编译可用的测试程序。测试程序可以编译,并且我可以成功使用它们。 但是,我想了解和理解的是,上述库中为环形缓冲区的元素分配的内存在哪里分配?是上面存储库中具有给定测试程序的堆栈还是堆?

1 个答案:

答案 0 :(得分:0)

  

为上述库中的环形缓冲区元素分配的内存在哪里分配?是上面存储库中具有给定测试程序的堆栈还是堆?

如果您这样做

{
   RingBufCPP<int, 10> rb1;
   RingBufCPP<int, 10> * rb2 = new RingBufCPP<int, 10>;
   ...
}

rb1 在堆栈上, rb2 的值在堆栈上

您可以选择,因为如果知道大小,并且没有 new 可以在实现中分配缓冲区,则可以选择


但是在MTCircularBuffer( size_t size )中有一个 new ,无论您做什么MTCircularBuffer<int> rb1(10);new MTCircularBuffer<int>(10);

,一部分都会分配到堆中