私はARM Cortex-A9で動作するアプリケーションを持っています。コードの特定の部分を入力すると、Linuxタスクの「top」ビューで、アプリケーションが物理メモリが不足して終了するまでメモリ使用量が増加することがわかります。Embedded Linuxデバイスで実行されているC/C++アプリケーションでのメモリリークのデバッグ
これについていくつかの調査を行い、mtraceを実装しようとしましたが、それは私に非常に簡潔な結果を与えませんでした。基本的に私はこの
Memory not freed:
-----------------
Address Size Caller
0x03aafe18 0x38 at 0x76e73c18
0x53a004a8 0x38 at 0x76e73c18
のようなものを取得し、私も、これは大きな問題(多分別の小さい問題)ではないと思います。
それとコンパイラをインストールするには、デバイス上に十分なスペースがないので、私はまた
は、だから私は、私は単にコードを通過する必要があることを恐れて...(おそらく素晴らしい仕事だろう)Valgrindのを使用することはできませんメモリ使用量の増加を引き起こす可能性のあるものを探してください。どこかのガイドがありますか?コードでは、 "malloc"または "new"はほとんど使用されません。私はgdbを利用することができます。コード内の多くはあり
while(someloop){
...
double *someptr;
...
}
など
while(someloop){
...
int32 someArray[100] = {0};
...
}
をそのうち次が問題であるならば、私は上の明確でないです
一つのことです。そのループが発生し、それらの変数またはポインタをインスタンス化するときは、空き領域を使用し続けますか、または最後の反復のスペースを使用しますか?
示されたコードに問題はありません。バグは他の場所になければなりません。 –
なぜデバイス上にコンパイラが必要ですか? –
最後の2つのスニペットに応答して、コードは最後の反復からのスペースを使用する必要があります。毎回より多くの領域を割り当てていた場合は、スタックにオーバーフローすることになります(これらの変数はスタックに割り当てられているため)。アセンブリコードを見て確認することができます。 '-S'でコンパイルしてアセンブリコードを取得するか、デバッガでアセンブリコードを参照してください。 – user3386109