問題タブ [memory-management]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
optimization - メモリ割り当ての時間計算量
new、mallocなどを使用した動的メモリ割り当ての時間計算量は? 私はメモリ アロケータがどのように実装されているかについてほとんど知りませんが、その答えは実装に依存するということだと思います。したがって、より一般的なケース/実装のいくつかについて回答してください。
編集:最悪の場合、ヒープ割り当てが無制限であると聞いたのを漠然と覚えていますが、平均/典型的なケースに本当に興味があります。
optimization - 割り当てられたメモリの解放
現在の関数が終了する前に、C の alloca() によって割り当てられたメモリを明示的に解放することは可能ですか? もしそうなら、どのように?
c++ - C++ から C に動的に割り当てられたメモリを返す
Cなどから使用できる必要があるdllがあるため、文字列オブジェクトなどを通常のように使用することはできませんが、これを安全に行う方法がわかりません..
ss がスタックから落ちたときに c 文字列が破壊される可能性はありますか? 私はそう仮定しています...
別のオプションとして、ヒープに新しい文字列を作成することもできますが、それを解放するにはどうすればよいでしょうか?
文字列だけでなく、他のものへのポインタについても同じことが言えます。
memory-management - The Big Tree: RIA でデータをリリースするタイミング
この質問は、Java JTree または Window .Net Tree (Winforms) または Adobe Flex Tree に関するものです。
クライアント/サーバー アプリケーション (Flex の場合、実際には Web です) には、階層データを含むツリーがあります (Windows Explorer タイプのインターフェイス内)。現在、ユーザーがサーバーからより多くのデータを要求すると、ツリーを遅延ロードします。これは問題なく、約 750K ノード (.Net Winforms および Adobe Flex で経験的にテスト済み) までは機能しますが、その後は遅くなります。しかし、データベースは急速に拡大し (主に、ユーザーが大量のノードを貼り付けることができるため)、2,000 万ノードのデータベースはまったくありそうもないことではありません。
ガベージ コレクターがメモリを解放できるように、ブランチが折りたたまれているときにツリーからデータを解放する必要がありますか? これは問題ありませんが、ユーザーが効率的でなく、ブランチを折りたたまない場合はどうなるでしょうか? しばらく触れられていないブランチを閉じるメモリ管理モジュールを実行する必要がありますか?
メモリ不足にならないようにするには、これはすべて大変な作業のように思えます。
編集:ノードの崩壊時にデータを解放する必要がありますか? もしそうなら、いつ?弱いオブジェクト キャッシュのアイデアは良いですが、UI が壊れるまで引き続き UI をいっぱいにする必要がありますか (それは悪いアイデアではないかもしれません)。
iphone - UIScrollView内のかなり大きな画像でUIImageViewsによって使用されるメモリの割り当てを解除する際の問題
大きなUIScrollViewがあり、そこに3〜4個のかなり大きな(320x1500ピクセル程度)UIImageView画像タイルを配置しています。これらのUIImageViewをNIBファイル内のスクロールビューに追加しています。コントローラに1つのコンセントがあり、それはUIScrollViewへのコンセントです。このためにプロパティ(非アトミック、保持)を使用し、それを合成しています。
私の質問はこれです:メモリモニターでこれを観察すると、これらすべての画像を含むビューがロードされると、使用されるメモリがかなり増加することがわかります(予想どおり)。しかし、私がビューを離れると、それとそのコントローラーは割り当て解除されますが、それらが使用したメモリの近くではあきらめないようです。これらのビューの1つ(アプリにはいくつかあります)を320x460の1〜3枚の画像に切り取り、他のすべてを同じままにすると、メモリが正常に再キャプチャされます。
これほど大きな画像を使用することに問題はありますか?このコード(以下に貼り付け)で何か間違ったことをしていますか?
これは、問題を引き起こしているviewControllerからのスニペットです。
更新:私は別の奇妙な現象に気づきました。ビューのスクロールを使用しない場合、それはメモリにぶら下がっているようです。しかし、たくさんスクロールして、すべてのUIImageViewが一度に表示されるようにすると、失われたメモリのほとんどが解放されて回復します。
UPDATE2:私がこれを求めている理由は、私のアプリがメモリ不足のために実際にクラッシュしているためです。キャッシュして余分なメモリを使い果たしただけでもかまいませんが、didReceiveMmoryWarningの状態であっても、解放されることはないようです。
iphone - コンビニエンス メソッドと init メソッドのメモリ使用量
最近、iPhoneのメモリ管理について調べた際、同じオブジェクトでコンビニエンスメソッドとinitメソッドを比較してみました。たとえば、ダウンロードした NSData を表示する UIImageView があります。
便利な方法:
初期化方法:
ビューを行ったり来たりしてメモリ使用量を増やし、「Simulate Memory Warning」をクリックすると、アプリのメモリ使用量がコンビニエンス メソッドで 20MB から 18MB になり、init メソッドですぐに 20MB から 13MB になりました。
また、便利なメソッドの自動リリースでリリースする時間を与えるために、アプリを待って操作しました。でもあまり落ちませんでした。
オートリリースとリリース以外に、他に何が違いをもたらしましたか?
memory-management - 適切なメモリ プロファイルを構成するものは何ですか?
デスクトップ アプリケーションを設計する際に、アプリケーションが使用するメモリの量に関する一般的なルールはありますか?
負荷の高いアプリケーションの場合、Firefox や Google Chrome のように簡単に理解できるか、少なくともプロファイリングできます。しかし、小規模なユーティリティや基幹業務アプリケーションの場合、許容できるメモリ使用量はどれくらいでしょうか?
最近、メモリ使用量とパフォーマンスのトレードオフに出くわしたので質問しましたが、それに関して一般的なコンセンサスがあるかどうか疑問に思っていますか?
編集:プラットフォームは、リッチ インターネット アプリケーションを実行できるマシンを使用するユーザー向けの Windows XP です。
私の特定のトレードオフの問題は、メモリに大量の画像をキャッシュすることです。可能であれば、ユーザーのメモリが許す限りアプリをキャッシュしたいと思っています。現時点でのメモリ負荷を考慮して、アプリケーションが特定の最大制限までキャッシュするようにしました。.
しかし、良い数字は何でしょう?どうやって思いつきますか?それが私が尋ねているポイントです。
python - 自分自身を削除する Python オブジェクト
なぜこれがうまくいかないのですか?クラスのインスタンス自体を削除しようとしています。
c# - アプリケーションのメモリをリクエストする
私はこの人に似た問題を抱えています。アプリケーションであるという主な違いは、開発者環境向けではないため、Sql Server が使用するスペースを最適化する方法を知る必要があります (おそらく仕様に基づいてマシンごとに)。
リカルド C の回答、特に次の点に興味をそそられました。
SQL Server ドキュメントからの抜粋:
最大サーバー メモリ (MB)
SQL Server が起動時および実行中に割り当てることができるメモリの最大量を指定します。SQL Server と同時に複数のアプリケーションが実行されていることがわかっていて、これらのアプリケーションを実行するのに十分なメモリがあることを保証したい場合は、この構成オプションを特定の値に設定できます。Web サーバーや電子メール サーバーなどの他のアプリケーションが必要な場合にのみメモリを要求する場合は、オプションを設定しないでください。SQL Server は必要に応じてそれらのアプリケーションにメモリを解放します。ただし、多くの場合、アプリケーションは起動時に利用可能なメモリをすべて使用し、必要に応じてそれ以上のメモリを要求しません。. このように動作するアプリケーションが SQL Server と同時に同じコンピューター上で実行される場合は、アプリケーションが必要とするメモリが SQL Server によって割り当てられないことを保証する値にオプションを設定します。
私の質問は、アプリケーションが必要なときに OS からメモリを要求する方法です。これはコンパイルに組み込まれたものですか、それとも開発者によって管理されるものですか? このマシンで実行されている 2 つの主要なアプリは、Sql Server と、私が開発している (かなり重い) C# アプリケーションです。OS にメモリを要求する領域では特に何もしていないことはほぼ確実です。これを行う正しい/必要な方法はありますか?
c - 仮想領域からページへ
Linux カーネルでは、 を指定すると、プロセスの のリストにアクセスできtask_struct
ます。これらの が与えられた場合、実際にこの vma に対応するを取得するにはどうすればよいですか?mm
vm_area_struct
vm_area_struct
struct page
mm/memory.c などで関数を探してみましたが、途方にくれました。
編集: アイデアは、vma 内のどのページが現在メモリ内にあり、どのページがそうでないかを見つけることです。しかし、これは宿題の小さな部分であり、自分で解決する必要があるため、誰かにこの方法を教えてもらいたくありません。しかし、この vma に対応するページを見つける方法がわかりません。ページを見つけることができれば、有効な pfn があるかどうかを確認できると思います。