問題タブ [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.
php - PHPスクリプトでメモリを解放する
私が行っているプロジェクトの php スクリプトを書き終えました。次のステップは、一部のスクリプトが多くのメモリを消費するため、メモリの観点からコードを改善できるかどうかを確認したいと考えています。私はこれについて調査を行っており、1 つの提案は変数を NULL にして設定解除することですが、これを行う例は見たことがありません。そこで、スクリプトで実行される一般的なアクションの例を示し、これが適切な方法であるかどうかを知りたいと思いました。
それはメモリを解放する正しい方法でしょうか?PHPのガベージコレクションは遅延する可能性があると読んだので、すぐに縮小するため、値をNULLにすることをお勧めします。
これはこのサイトには曖昧すぎるかもしれませんが、これがメモリを解放する適切な方法であるかどうか誰か教えていただけませんか? または、別の方法がある場合は、それがどのように機能するかを視覚的に確認できるように、例を提供してください. 前もって感謝します!
c++ - 最小限のスペースを使用して C++ クラスを強制的にコンパイルできますか?
私は文字通り数十億をインスタンス化するクラスを持っています。できる限り少ないデータを入れるように最善を尽くしました.x64アーキテクチャ用にコンパイルすると、10バイトになりました: anunsigned short int
および a size_t
. ただし、(VSで)マウスオーバーするとsizeof(myclass)
、16バイトが報告されます。いずれかのフィールドをコメントアウトすると、クラスのサイズは予想どおり、それぞれ 10 バイトと 2 バイトになります。
クラスで 10 バイトのみを使用するようにコンパイラに指示する方法はありますか?
c++ - 関数呼び出しのインラインで引数を記述するのではなく、事前に引数を変数として宣言すると、(メモリの観点から) どのような違いがありますか?
たとえば、ダミー関数の場合write(int length, const char* text){...}
、これら 2 つのアプローチの間にメモリの点で違いはありますか?
また
おまけ:繰り返しがある場合はどうなりますか?つまり、ループは、要素が目的の引数である配列を使用して関数を繰り返し呼び出します。
Arduino のようなメモリに敏感なプラットフォームでの書き込み時に効率を最適化するために、それぞれがどのようにメモリを消費するかをよりよく理解することを期待して、この質問、特にボーナスについて質問しています。とはいえ、さらに効率的な方法を知っている場合は、共有してください! ありがとう!
string - Goでのガベージコレクションとポインタの正しい使い方
私は Python/Ruby/JavaScript のバックグラウンドを持っています。ポインターがどのように機能するかは理解していますが、次の状況でそれらを活用する方法が完全にはわかりません。
画像データベースを検索し、見つかった各画像に何が表示されているかを説明する JSON を返す架空の Web API があるとします。
私の目標は、各タグを次のような画像 URL のリストにマップするデータ構造を Go で作成することです。
ご覧のとおり、各画像 URL は同時に複数のタグに属することができます。何千もの画像とさらに多くのタグがある場合、画像の URL 文字列が各タグの値でコピーされると、このデータ構造が非常に大きくなる可能性があります。これは、ポインターを活用したいところです。
Go の 2 つの構造体で JSON API 応答を表すことができます。これfunc searchImages()
は偽の API を模倣しています。
非常に大きなメモリ内データ構造をもたらす最適ではないマッピング関数は、次のようになります。
値でコピーするのではなく、Image
構造体フィールドへのポインターを使用するように変更できます。URL
それは機能します。私の最初の質問はresult
、この方法でマッピングを作成した後、データ構造に何が起こるかということです。Image
URL
文字列フィールドは何らかの方法でメモリに残され、残りはresult
ガベージ コレクションされますか? それともresult
、何かがそのメンバーを指しているため、データ構造はプログラムの最後までメモリに残りますか?
これを行う別の方法は、URL を中間変数にコピーし、代わりにそれへのポインターを使用することです。
これは良いですか?result
データ構造は正しくガベージ コレクションされますか?
Image
それとも、代わりに構造体の文字列へのポインターを使用する必要がありますか?
これを行うより良い方法はありますか?また、ポインターのさまざまな使用方法について詳しく説明している Go のリソースもあれば幸いです。ありがとう!
https://play.golang.org/p/VcKWUYLIpH7
更新:最適なメモリ消費と、不要なガベージを最も生成しないことが心配です。私の目標は、可能な限り最小限のメモリを使用することです。