【问题标题】:understanding memory allocation nature for a circular buffer implementation [closed]了解循环缓冲区实现的内存分配性质[关闭]
【发布时间】:2019-01-30 09:20:13
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你知道dynamic 分配在代码中的样子吗?涉及一个关键字(或几个 C 函数之一) - 您是否在链接代码中搜索它?你发现了什么?

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


【解决方案1】:

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

如果你这样做了

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

rb1在栈上,rb2的值在堆上

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


但是在MTCircularBuffer( size_t size ) 中有一个new,无论你在MTCircularBuffer&lt;int&gt; rb1(10);new MTCircularBuffer&lt;int&gt;(10); 做什么,都会在堆中分配一部分

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-26
  • 2014-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多