ホームページ  >  記事  >  メモリリークとメモリオーバーフローの違いは何ですか?

メモリリークとメモリオーバーフローの違いは何ですか?

青灯夜游
青灯夜游オリジナル
2020-12-03 17:22:0840149ブラウズ

違い: メモリ オーバーフローとは、プログラムがメモリを適用したときに、使用するのに十分なメモリ領域がなく、システムが必要な領域を割り当てることができなくなることを意味します。メモリ リークとは、プログラムがメモリを適用した後にメモリ リークが発生することを意味します。メモリの場合、適用されているメモリ空間を解放することはできません。1 回のメモリ リークの害は無視できますが、メモリ リークの数が多すぎると、メモリ オーバーフローが発生します。

メモリリークとメモリオーバーフローの違いは何ですか?

#この記事の動作環境: Windows 7 システム、Dell G3 コンピューター。

メモリ オーバーフロー (メモリ不足) は、プログラムがメモリを要求したときに、使用するのに十分なメモリ領域がなく、整数などのメモリ不足が発生することを意味します。を申請しましたが、long でしか格納できない数値を格納しており、メモリオーバーフローです。

メモリ リーク (メモリ リーク) は、プログラムがメモリを適用した後、適用されたメモリ空間を解放できないことを意味します。メモリ リークの害は無視できますが、蓄積された結果は次のとおりです。メモリ リークは深刻で、メモリがどれだけ多くても、遅かれ早かれ占有されてしまいます。

メモリ リークは最終的にメモリ不足につながります。

メモリ オーバーフローとは、割り当てを要求したメモリがシステムが提供できる量を超え、システムが要求を満たすことができず、オーバーフローが発生することを意味します。

メモリ リークとは、使用するメモリ (新規) の割り当てをシステムに適用するが、使用後にメモリを返さない (削除) ことを意味します。その結果、メモリも失われます。申請したメモリにアクセスできなくなり (おそらくアドレスを失った可能性があり)、システムはそのメモリを必要なプログラムに再度割り当てることができません。お皿には果物はどうしても4個しか入らないので、5個乗せたのですが、地面に落ちて食べられませんでした。これはオーバーフローだ!たとえば、スタックがいっぱいのときにスタックをプッシュすると、必然的にスペース オーバーフローが発生し、これをオーバーフローといいます。スタックが空の場合、スペース オーバーフローが発生します。これをアンダーフローといいます。 。つまり、割り当てられたメモリがデータ項目のシーケンスを書き込むのに十分ではなく、メモリ オーバーフローと呼ばれます。メモリ リークは 4 つのカテゴリに分類できます:

1. 頻繁なメモリ リーク。メモリ リークのあるコードは複数回実行されるため、実行されるたびにメモリ リークが発生します。 2. 時折メモリ リークが発生します。メモリ リークを引き起こすコードは、特定の状況または操作下でのみ発生します。頻繁と散発は相対的なものです。特定の状況では、たまにしか起こらないことが一般的になる場合があります。したがって、メモリ リークを検出するには、テスト環境とテスト方法が重要です。

3. 1 回限りのメモリ リーク。メモリ リークを引き起こすコードは 1 回だけ実行されるか、アルゴリズムの欠陥により、常に 1 つのメモリ ブロックのみがリークされます。たとえば、クラスのコンストラクターでメモリが割り当てられているが、デストラクターでメモリが解放されていない場合、メモリ リークは 1 回だけ発生します。

4. 暗黙的なメモリ リーク。プログラムは実行中に継続的にメモリを割り当てますが、最後までメモリは解放されません。厳密に言えば、プログラムは最終的に要求されたすべてのメモリを解放するため、ここでメモリ リークは発生しません。しかし、数日、数週間、さらには数か月にわたって実行する必要があるサーバー プログラムの場合、メモリの解放が間に合わないと、最終的にシステムのメモリがすべて使い果たされる可能性があります。したがって、このタイプのメモリ リークを暗黙的メモリ リークと呼びます。

プログラムを使用するユーザーから見れば、メモリ リーク自体は何ら害を及ぼすものではなく、一般のユーザーとしてはメモリ リークの存在をまったく感じません。本当に有害なのはメモリ リークの蓄積であり、最終的にはシステムのすべてのメモリを消費します。この観点から見ると、1 回限りのメモリ リークは累積しないため有害ではありませんが、暗黙的なメモリ リークは再発性および散発的なメモリ リークよりも検出が難しいため、非常に有害です。 # 関連する無料ビデオ チュートリアルの推奨事項: 「

プログラミング ビデオ

以上がメモリリークとメモリオーバーフローの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。