C++ 为什么free()不能释放Arduino Uno上的RAM

C++ 为什么free()不能释放Arduino Uno上的RAM,c++,memory,memory-management,arduino,C++,Memory,Memory Management,Arduino,我试图通过删除一个变量来释放RAM,该变量与free()函数一起使用,但我的RAM没有清理干净。我想没有进行垃圾清理吧?在我退出代码部分(作用域为if语句、while循环或函数)后,空间会被清理,但free()语句本身不会 我正在执行以下操作以检查RAM: int freeRam () { extern int __heap_start, *__brkval; int v; return (int) &v - (__brkval == 0 ? (int) &__h

我试图通过删除一个变量来释放RAM,该变量与free()函数一起使用,但我的RAM没有清理干净。我想没有进行垃圾清理吧?在我退出代码部分(作用域为if语句、while循环或函数)后,空间会被清理,但free()语句本身不会

我正在执行以下操作以检查RAM:

int freeRam () {
  extern int __heap_start, *__brkval; 
  int v; 
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); 
}

此外,如何“释放”这样的内存?

您不能仅仅因为在单个内存块上调用了
free()
,就期望
\ubrkval
减少。内存块将被标记为可用且可重用,但通常情况下,
\uu brkval
只会根据您的程序在任何时候使用的最大内存量朝一个方向移动。

您使用的是什么Arduino?你看到了吗::为了确定当前可用的内存量,使用这个MemoryFree库可以找到最准确的结果。我也使用了这个库,虽然通常会得到不同的结果。也许下面的答案是为什么我得到了不同的结果……是的,GregHewgill的评论更能解决这个问题。“我想没有垃圾清理发生了”默认情况下C++没有垃圾收集。我不知道你现在的工作环境,但是……你到底是如何“释放”的呢?我想我应该编辑我的问题,因为这是一个“很糟糕”的隐含后续问题@比尔:不要。操作系统比您更清楚如何最好地管理其内存。(可以说。)@WildBill:Arduino没有多任务,因此没有太多理由真正释放内存(也就是说,通过减少
\uu brkval
)。此外,内存管理器可以减少
\uu brkval
的唯一方法是释放堆空间中的最后一个块。否则,在一般情况下,如果在中间释放一个块,就不会有内存压缩。