1

App Store 向けのアプリを開発していますが、メモリ管理に奇妙な問題があります。

ARCを使用しています。

インスツルメントに接続されたunjailbroken iPod touch 4G 6.0.1でアプリをテストすると、すべてうまくいくように見えます。アプリは常に 5 MB 未満のメモリを使用し、リークはありません。ただし、長時間使用した後、5Mb 未満の計測器で監視されているにもかかわらず、メモリの警告が表示され始め、最終的にOS によって強制終了されます。バックグラウンドで開いているアプリがないので、アプリが追跡できないメモリリークを起こしていると想定しています。どうすればいいの?

さらに、具体的には、メモリ使用量を追跡する関数の使用を開始しました。

 struct task_basic_info info;
    mach_msg_type_number_t size = sizeof(info);
    kern_return_t kerr = task_info(mach_task_self(),
                                   TASK_BASIC_INFO,
                                   (task_info_t)&info,
                                   &size);
    if( kerr == KERN_SUCCESS ) {
        return info.resident_size/1024.0/1024.0;
    } else {
        return -1.0;
    }

また、アプリの動作で予想される範囲 (60 ~ 70Mb) のメモリ使用量が報告されているようです。Instruments で同時に測定を行っていますが、それでも 3 ~ 4Mb と表示されます。ここで何が起こっているのですか?

4

2 に答える 2

4

Instruments は、アドレス空間の総消費量ではなく、ヒープ割り当てを追跡している可能性があります。多数のファイルがメモリ マップされる原因となっているアプリがある場合、ヒープ割り当て (malloc など) の量が少なくても、アプリのシステム メモリの消費量が多いという状況につながる可能性があります。

アプリについて詳しく知らなければ、上記以外のことを実際に推測することはできません。

于 2013-01-28T18:16:29.197 に答える
1

Allocations インストルメントは、ヒープ メモリのみを追跡します。これは、実行中のアプリケーション全体に対するメモリ使用量のほんの一部です。

仮想メモリ使用量の統計全体である VM トラッカー インストゥルメントを見てください。おそらく問題を見つけることができます。

于 2013-02-01T07:17:59.700 に答える