問題タブ [free]
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.
c - atexit() での解放
atexit() 関数でメモリを解放するポイントはありますか?
起動後に malloc されるグローバル変数があります。atexit() 関数を記述して解放することもできますが、プログラムが終了したときに、システムはそのメモリをすべて再利用するのではないでしょうか?
自分で片付けて積極的に掃除することに何かメリットはありますか?
windows - メモリ割り当て解除ルーチンは、解放されるブロックに影響しますか?
Windows HeapFree、msvcrt free: 解放されるメモリがページインされますか? 終了時にメモリを解放しないと、アプリケーションのシャットダウンが大幅に高速化されるかどうかを推定しようとしています。
注: これは非常に具体的な技術的な質問です。アプリケーションが終了時に呼び出す必要があるかどうかではありませんfree
。
c - エラーから戻った後にメモリを解放する最良の方法は何ですか?
呼び出し元にメモリを割り当てる関数があるとします。
2 番目の malloc() が失敗した場合に備えて、割り当てられたメモリを free() する最善の方法について、フィードバックをお寄せください。より多くのエラー終了ポイントとより多くのメモリが割り当てられた、より複雑な状況を想像できます。
c# - C# データ割り当ての問題
次の問題があります。関数を含むC++ dllがあります
次に、クラスを持つC#dllがあります
//関数 Free () は次のようになります。
私はC#アプリケーションからそれを呼び出します
問題は、しばらくすると C# アプリケーションが SystemAccessViolationExcetpion でクラッシュすることです。どこに問題があるのか わかりますか?
より明確にするために:C#アプリケーションは、一部のタイプの入力では終了し、他のタイプではクラッシュする可能性があるため、呼び出し規約に問題があるとは思いませんか?
c - 通常の宣言ではなくポインタで free を使用する必要があるのはなぜですか?
次のようなポインターを宣言するときに free() を使用する必要があるのはなぜですか。
しかし、私がするときではありません:
c - プログラムの終了前に malloc 後に解放しないと、実際にはどうなりますか?
割り当てられたすべてのポインターを解放する必要があることは、すべて教えられています。ただし、メモリを解放しない場合の実際のコストについては、少し興味があります。がループ内またはスレッド実行の一部で呼び出された場合など、いくつかの明白なケースでmalloc()
は、メモリ リークが発生しないように解放することが非常に重要です。ただし、次の 2 つの例を考えてみましょう。
まず、次のようなコードがあるとします。
ここでの本当の結果は何ですか?私の考えでは、プロセスが停止し、とにかくヒープ領域がなくなるので、への呼び出しを逃しても害はありませんfree
(ただし、閉鎖、保守性、および優れた実践のためにとにかくそれを持つことの重要性を認識しています)。私はこの考えで正しいですか?
次に、シェルのように動作するプログラムがあるとします。ユーザーは次のような変数を宣言できaaa = 123
、それらは後で使用するために動的データ構造に格納されます。明らかに、*alloc 関数 (ハッシュマップ、リンク リストなど) を呼び出すソリューションを使用することは明らかです。この種のプログラムの場合、malloc
これらの変数はプログラムの実行中に常に存在する必要があり、静的に割り当てられたスペースでこれを実装する良い方法 (私が見ることができる) がないため、呼び出し後に解放することは意味がありません。割り当てられているが、プロセス終了の一部としてのみ解放されるメモリの束を持つのは悪い設計ですか? もしそうなら、代替手段は何ですか?
c - Cでメモリを解放するためのパターン?
私は現在、Cベースのアプリケーションに取り組んでおり、アンチパターン以外の方法でメモリを解放することに少しこだわっています。私はメモリ管理のアマチュアです。
私の主な問題は、さまざまなスコープでメモリ構造を宣言することです。これらの構造は、他の関数を参照して渡されます。これらの関数の一部は、エラーとexit()をスローする可能性があります。
1つのスコープでexit()を実行したが、すべてのデータ構造がそのスコープに含まれているわけではない場合、構造を解放するにはどうすればよいですか?
すべてを疑似例外ハンドラーにまとめて、ハンドラーに解放を処理させる必要があると感じますが、解放する必要があるかどうかにかかわらず、すべてを知る必要があるため、それでも醜いようです...
c - 使用しない場合、malloc されたブロックはどうなりますか?
次の C コードを検討してください。
以前に malloc されたものではない c を解放しようとしているため、これは segfault になります。私の質問は、malloc したばかりのブロックはどうなりますか? 明らかに c はもうそれを指していないので、使用できませんが、まだ「フリー」リストの一部と見なされていますか、それとも明示的なメモリ リークですか?
c - SIGTERM で動的に割り当てられた変数を解放するには?
私はこのようなコードに取り組んでいます
プロセスがフォークされると、すべての変数も複製されます。通常、var のすべてのコピーが解放されます。
によってエラーが発生した場合はfork()
、作成されたすべてのプロセスにシグナル SIGTERM を送信します。そして、var を解放してアプリケーションを終了する SIGTERM のシグナル ハンドラを作成する必要があります。ただし、free() はそうではないsignal safe function
ので、呼び出すべきではありません。しかし、その変数を free() する方法は?
あなたの答えに感謝します...
編集: valgrind は、まだ到達可能な変数も示しています:
c - malloc() と free() は割り当てられたサイズとアドレスをどこに保存しますか?
割り当てられたアドレスとそのサイズはどこmalloc()
に保存されますか (Linux GCC)? free()
一部の実装では、実際に割り当てられたメモリの前にそれらを保存することを読みましたが、テストでは確認できませんでした。
背景、おそらく誰かがこれについて別のヒントを持っています:
他のプロセスの文字列の現在の値を判断するために、プロセスのヒープメモリを分析して少し実験しています。プロセス ヒープ メモリへのアクセスとその中の探索は問題ありません。ただし、文字列の値が変更され、プロセスがメモリの新しい部分を毎回割り当てるため、文字列のアドレスが変更されます。文字列の形式は固定されているため、簡単に見つけることができますが、いくつかの変更を加えた後でも、古いバージョンの文字列がヒープ メモリに残っているため (おそらく解放されますが、再利用/上書きはされません)、そのため、私にはわかりません。現在の文字列はどれですか。
したがって、現在のものを引き続き見つけるために、メモリ内で見つけた文字列がまだ使用されているかどうかを、そのアドレスとアドレスを比較して確認し、知りたいと考えていmalloc()
ますfree()
。
チャオ、エルマー