了解循环缓冲区实现的内存分配性质

understanding memory allocation nature for a circular buffer implementation

我试图在使用第三方编写的 Ring Buffer 实现时了解内存分配。

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

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

我尝试在 Ubuntu 16.04 PC 上编译上述库中可用的测试程序。这些库随测试程序一起提供。测试程序可以编译,我可以成功使用它们。 但是,我想知道和理解的是环形缓冲区元素(在上面的库中)的内存分配在哪里?是在栈上还是堆上?

where does the memory allocated for elements of ring buffer in above libraries get allocated ? Is it on the stack or the heap with the given test programs in the above repositories ?

如果你这样做

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

rb1在栈上,rb2的值在堆上

您可以选择,因为大小已知且没有在实现中分配缓冲区


但是在MTCircularBuffer( size_t size )中有一个new,无论你做什么MTCircularBuffer<int> rb1(10);new MTCircularBuffer<int>(10);[=都会在堆中分配一部分15=]