了解循环缓冲区实现的内存分配性质
understanding memory allocation nature for a circular buffer implementation
我试图在使用第三方编写的 Ring Buffer 实现时了解内存分配。
我提到了环形缓冲区的两个免费实现:
我尝试在 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=]
我试图在使用第三方编写的 Ring Buffer 实现时了解内存分配。
我提到了环形缓冲区的两个免费实现:
我尝试在 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=]