4

free() 関数で変数を使用した後に変数を削除して RAM を解放しようとしていますが、RAM がクリーンアップされません。ゴミの片付けは行われていないと思いますか?コードのセクション (範囲指定された if ステートメント、while ループ、または関数) を終了すると、スペースはクリーンアップされますが、free() ステートメント自体はクリーンアップされません。

RAMをチェックするために次のことを行っています。

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

さらに、そのようなメモリをどのように「解放」しますか?

4

1 に答える 1

7

1 つのメモリ ブロック__brkvalを呼び出したからといって、 が減少することは期待できません。free()メモリ ブロックは空きとしてマークされ、再利用できるようになりますが、一般に、プログラムが一度に使用するメモリの最大量に__brkval応じて一方向にのみ移動します。

于 2012-11-29T00:23:24.140 に答える