問題タブ [memory-optimization]

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.

0 投票する
9 に答える
1856 参照

c++ - ループの反復ごとにベクトルを消去します。最もメモリ効率の良い方法は何ですか?

std::vector について質問があります。

私は非常にメモリを集中的に使用するアルゴリズムを使用しており、ベクトルのサイズを予測し、ベクトルに十分なメモリを事前に予約しておくと、メモリの使用量を削減するのに非常に役立ちます。

次のうちどれが優れていますか。

またはこれ:

どれが一番いいのか、もっといい方法があれば教えてください。

事前にどうもありがとうございました!

0 投票する
8 に答える
5804 参照

c - パディングを回避するための C 構造体でのフィールドの自動並べ替え

パディング効果を減らすために、構造体のフィールドを手動で並べ替えるのに数分を費やしました[1]。私の直感では、Perl スクリプトを作成したり、この種の最適化を行ったりすることに時間を費やしたほうがよいのではないかと考えています。

私の質問は、これも冗長かどうかです。私が認識していないツール、または構造体をパックするために[2]をオンにできるはずのコンパイラ機能がすでにありますか?

この問題は、これがいくつかの異なるアーキテクチャ間で一貫して最適化される必要があるという事実によってさらに複雑になります。そのため、使用するツールが何であれ、異なる構造体アラインメントとポインター サイズも考慮できる必要があります。

EDIT:簡単な説明 - 私がしたいのは、パディングなしでコンパイルするように構造体を「パック」するのではなく、パディングを避けるためにソースコードのフィールドを並べ替えることです。

編集 #2: 別の問題: 構成によっては、一部のデータ型のサイズも変わる場合があります。明らかなものは、さまざまなアーキテクチャのポインターとポインター差分ですが、浮動小数点型 (「正確さ」に応じて 16、32 または 64 ビット)、チェックサム (「速度」に応じて 8 または 16 ビット) などもあります。その他の明らかでないもの。

[1] 問題の構造体は、組み込みデバイスで何千回もインスタンス化されるため、構造体の 4 バイト削減ごとに、このプロジェクトの成功と失敗の違いを意味する可能性があります。

[2] 利用可能なコンパイラは、GCC 3.* および 4.* 、Visual Studio、TCC、ARM ADS 1.2、RVCT 3.*、およびその他いくつかの不明なものです。

0 投票する
1 に答える
1014 参照

php - PHP メモリの最適化

xdebug を使用してコードをトレースし、使用しているメモリの量を確認していますが、トレースの開始時には約560224バイトのメモリを使用しています。これは正常ですか?これは、コードが実行される前です。

編集: 明確にする必要がありました。これは私が最適化しようとしているものではありません。ふと気がついたので説明を求めました。

0 投票する
4 に答える
1417 参照

php - さまざまなサイズの順列

すべての可能なサイズのすべての順列を取得する関数を PHP で作成しようとしています。例は、開始するのに最適な方法だと思います。

さまざまなサイズの可能な順列:

注:重複があるかどうかは気にしません。この例では、将来の重複はすべて省略されています。

私がこれまでにPHPで持っているもの:

私が考えることができる最も近いことは、配列をシャッフルし、最初の n 要素を選択し、それがすでに結果配列にあるかどうかを確認し、そうでない場合は追加し、数学的にその長さの可能な順列がなくなったときに停止することです. しかし、それは醜く、リソースの効率が悪いです。

疑似コードアルゴリズムは大歓迎です。


また、非常に大きな (価値のない) ボーナス ポイントの場合、関数で順列を 1 つだけ取得する方法はありますが、次の順列を取得するために以前のすべての順列を再計算する必要はありませんか?

たとえば、パラメーター 3 を渡します。これは、既に 3 つの順列が行われていることを意味し、前の 3 つをやり直さずに 4 を生成するだけですか? (パラメーターを渡す必要はありません。グローバルまたは静的に追跡できます)。

これを尋ねる理由は、配列が大きくなるにつれて、可能な組み合わせの数も増えるからです。要素が 12 個しかない 1 つの小さなデータ セットが急速に数兆の可能な組み合わせに成長し、一度に数兆の順列をメモリに保持することを PHP に任せたくないと言うだけで十分です。

0 投票する
2 に答える
3926 参照

data-structures - ディスクベースのトライ?

Trieを構築しようとしていますが、メモリ容量が非常に限られている携帯電話を使用しています。

数回のディスク読み取りを許容できるため、構造全体をディスクに保存し、必要に応じてのみロードするのがおそらく最善であると考えました。しかし、何度か試してみると、これは非常に複雑なことのように思えます。

Trie をディスクに保存し (つまり、部分的にのみロード)、高速ルックアップ プロパティを保持する方法にはどのようなものがありますか?
これは最初から良い考えですか?

0 投票する
6 に答える
3395 参照

python - Pythonでのメモリ効率の高いint-intdict

O(log n)時間で次の操作をサポートするPythonのメモリ効率の高いint-intdictが必要です。

私は約2億5000万ペアを保持する必要があるので、それは本当にタイトでなければなりません。

適切な実装(Python 2.7)を知っていますか?

編集不可能な要件やその他のナンセンスを削除しました。ありがとう、クレイグとキロタン!


言い換えると。これは、1Mペアの簡単なint-int辞書です。

平均して、整数のペアは49バイトを使用します。

2Mの整数の配列は次のとおりです。

平均して、整数のペアは8バイトを使用します。

辞書で8バイト/ペアを達成するのは一般的にかなり難しいことを私は受け入れます。 言い換えると、49バイト/ペアよりかなり少ない値を使用するint-intディクショナリのメモリ効率の高い実装はありますか?

0 投票する
6 に答える
805 参照

for-loop - forループの制御変数として整数が常に使用されるのはなぜですか?

ループがx回を超えて実行されないことを知っている場合がよくあります。この場合、xはバイトまたはshort(基本的にはintよりも小さいデータ型)で表すことができます。

バイトのようなもので8ビットだけで十分なのに、なぜ32ビット(ほとんどの言語で)を使用するintを使用するのでしょうか。

32ビットと64ビットのプロセスがあるので、1回のトリップで値を簡単にフェッチできますが、それでもより多くのメモリを消費します。または私はここで何が欠けていますか?

更新:明確にするために。速度に関しては違いがないことを私は知っています。メモリ消費への影響について質問しています。

0 投票する
5 に答える
6786 参照

php - 反復中に配列値の設定を解除すると、メモリが節約されますか?

これは単純なプログラミングの質問です。PHP がforeachループ中に配列のコピーと設定解除をどのように処理するかについての知識が不足しているためです。こんな感じです。変更したい方法でフォーマットされた外部ソースからの配列があります。簡単な例は次のとおりです。

しかし、私が欲しいのは次のようなものです:

だから私は最初のものを取り、$myData2番目のようにフォーマットします$myData。私は自分のフォーマットアルゴリズムに全く問題ありません。私の質問は、これらの配列が少し扱いに​​くくなる可能性があるため、メモリを節約する方法を見つけることにあります。したがって、foreachループ中に現在の配列値を新しい形式にコピーしてから、元の配列から作業中の値を設定解除します。例えば:

unset()ここで良いアイデアへの呼びかけはありますか?つまり、データをコピーして元の値が不要になったので、メモリを節約できますか? または、後続のコードでデータを参照していないため、PHP は自動的にデータをガベージ コレクションしますか?

コードは正常に実行され、これまでのところ、パフォーマンスの違いをテストするにはデータセットのサイズがごくわずかでした。後で奇妙なバグやCPUヒットに備えているのかどうかはわかりません.

洞察をありがとう。
-sR

0 投票する
3 に答える
1554 参照

memory-management - PHP CLI - メモリが無駄になっている場所を検出する

いくつかの CLI デーモンに PHP + Zend Framework を使用しています。それらはかなりのメモリを占有します。Zend Framework の部分が原因である可能性があると想定していますが、メモリが浪費されている場所を示す事実が必要です。

メモリが無駄になっている場所を特定するにはどうすればよいですか? これは単なる試行錯誤のプロセスですか? また、ガベージ コレクションを改善するにはどうすればよいですか (これも大きなメモリ使用量を引き起こす問題である可能性があるという記事をいくつか読みました)。