問題タブ [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 - Cプログラミング:エラー時にfree()を呼び出す?
これは私の前の質問のフォローアップです。ここにリンクします。
私の質問は次のとおりです。次のコードがあるとしましょう。
私が得ようとしているのはそれです-でエラーが発生した場合はどうなりread()
ますか?それは私の割り当てられたメモリが決して解放されないことを意味しますか?その場合、これをどのように処理しますか?free()
エラー処理の一部として呼び出す必要がありますか?
もう一度、私は悪い英語をお詫び申し上げます。^^;
どうもありがとう、K。
linux - linux new/delete, malloc/free large memory blocks
多数の CORBA サーバー プロセスを実行する Linux システム (kubuntu 7.10) があります。サーバー ソフトウェアは、メモリ割り当てに glibc ライブラリを使用します。Linux PC には 4G の物理メモリがあります。速度上の理由から、スワップは無効になっています。
データを処理する要求を受信すると、サーバー プロセスの 1 つが大きなデータ バッファーを割り当てます (標準の C++ 演算子 'new' を使用)。バッファ サイズはパラメータの数によって異なりますが、通常は約 1.2G バイトです。約 1.9G バイトまで可能です。リクエストが完了すると、「delete」を使用してバッファが解放されます。
これは、同じサイズのバッファを割り当てる複数の連続するリクエストに対して、またはリクエストが以前よりも小さいサイズを割り当てる場合にうまく機能します。メモリは問題なく解放されているように見えます。そうしないと、数回のリクエストの後、最終的にバッファ割り当ての試行が失敗します。いずれにせよ、KSysGuard などのツールを使用して、リクエストごとにバッファ メモリが割り当てられ、解放されていることがわかります。
この問題は、リクエストが以前よりも大きなバッファを必要とする場合に発生します。この場合、演算子 'new' は例外をスローします。最初の割り当てから解放されたメモリは、使用可能な空き物理メモリが十分にあるにもかかわらず、再割り当てできないかのようです。
最初の操作の後にサーバー プロセスを強制終了して再起動すると、より大きなバッファー サイズに対する 2 番目の要求が成功します。つまり、プロセスを強制終了すると、解放されたメモリがシステムに完全に解放されるように見えます。
ここで何が起こっているのかについて、誰かが説明できますか? ある種の断片化またはマッピング テーブル サイズの問題でしょうか? new/delete を malloc/free に置き換え、malopt を使用してメモリがシステムに解放される方法を調整することを考えています。
ところで-それが私たちの問題に関連しているかどうかはわかりませんが、サーバーは、処理要求ごとに作成および破棄される Pthreads を使用します。
c - free() が配列の長さを知っている場合、自分のコードでそれを要求できないのはなぜですか?
動的に割り当てられた配列の長さを、それらを操作する関数に渡すのが一般的な規則であることを私は知っています。
しかし、ポインターから割り当てられたメモリの長さを取得する方法がないfree()
場合、与えているのがまったく同じポインターである場合、どのようにして割り当てを解除するかを「自動的に」知ることができますか? C プログラマーとして、なぜ魔法に乗れないのですか?
free()
無料の (har-har) 知識はどこから得られますか?
c++ - free(p)がpをNULLに設定しないのはなぜですか?
これが標準的な動作にならない理由はfree()
何ですか?
同じオブジェクトを指す複数のポインター:
malloc
からキャストされた要求からの割り当てvoid*
逆に:
safefree()
void*&
(参照)にキャストされた要求
c - malloc と free に関するヘルプ: Glibc が検出されました: free(): 無効なポインター
このコードのデバッグについて助けが必要です。問題が malloc と free にあることはわかっていますが、どこで、なぜ、どのように修正するのか正確にはわかりません。答えないでください:「gdbを使用してください」とそれだけです。私はそれをデバッグするためにgdbを使用しますが、私はまだそれについてあまり知りません.
ありがとう。
c - malloc() によって割り当てられていない変数に対して free() を呼び出すべきではないのはなぜですか?
free
を呼び出すことによって作成されていないオブジェクトを取り除くために使用するのは悲惨なことだとどこかで読みましたがmalloc
、これは本当ですか? なぜ?
c - スタックメモリのfree()
Solarisでいくつかのcコードをサポートしていますが、少なくとも次のような奇妙なことがわかりました。
私の理解では、変数はローカル配列であるため、メモリはスタックから取得され、解放する必要はありません。さらに、malloc / calloc / reallocが使用されていないため、動作は未定義です。
これはリアルタイムシステムなので、サイクルの無駄だと思います。明らかな何かが欠けていますか?
c - `const char*` が問題を引き起こす可能性はありますか?
free
に使えますconst char*
か?これにより問題が発生しますか?
memory-management - free() がガベージ コレクション言語で許可されないのはなぜですか?
ウィキペディアでC#のエントリを読んでいて、次のようなものに出会いました。
管理メモリは明示的に解放できません。代わりに、自動的にガベージ コレクションが行われます。
自動メモリ管理を備えた言語では、手動管理さえ許可されていないのはなぜですか? ほとんどの場合、必要ないことがわかりますが、メモリが不足していて、GC がスマートであることに依存したくない場合に便利ではないでしょうか?
c++ - C++で静的メンバー変数を解放するには?
静的メンバー変数のメモリを解放する方法を説明できる人はいますか? 私の理解では、クラスのすべてのインスタンスが破棄された場合にのみ解放できます。この時点で私は少し無力です...
それを説明するいくつかのコード: