タグ付けされた質問 「memory-management」

可能であれば、公平でリクエスター間のスターベーションがないプログラム要求に応答するために、物理メモリーの一部を動的に割り当てて解放するプロセス。

9
Cアプリケーションを終了すると、mallocされたメモリは自動的に解放されますか?
次のCコードがあるとします。 int main () { int *p = malloc(10 * sizeof *p); *p = 42; return 0; //Exiting without freeing the allocated memory } そのCプログラムをコンパイルして実行するとき、つまりメモリにスペースを割り当てた後、アプリケーションを終了してプロセスが終了した後も、割り当てたメモリは割り当てられます(つまり、基本的にスペースを占有します)。

5
「実際の使用」を伴うmemory_get_peak_usage()
real_usage引数がtruePHP DOCSに設定されている場合は、システムから割り当てられたメモリの実際のサイズを取得します。もしそうなら、falseそれはによって報告されたメモリを取得しますemalloc() これらの2つのオプションのどちらが最大値を返しますか。php.iniのメモリ制限値に関連して割り当てられたメモリ? スクリプトがその制限にどれだけ近づいたかを知りたいです。

6
C ++でのベクトルの初期容量
何であるcapacity()のstd::vectorデフォルトconstuctorを使用して作成されますか?私size()はがゼロであることを知っています。デフォルトの構築されたベクトルはヒープメモリ割り当てを呼び出さないと言うことができますか? このようにして、のような単一の割り当てを使用して、任意の予約を持つ配列を作成することが可能になりますstd::vector<int> iv; iv.reserve(2345);。なんらかの理由で、size()2345から始めたくないとしましょう。 たとえば、Linux(g ++ 4.4.5、カーネル2.6.32 amd64)の場合 #include <iostream> #include <vector> int main() { using namespace std; cout << vector<int>().capacity() << "," << vector<int>(10).capacity() << endl; return 0; } 印刷0,10。それはルールですか、それともSTLベンダーに依存していますか?


11
C ++を使用して実行時にメモリ使用量を取得するにはどうすればよいですか?
プログラムの実行時にメモリ使用量VIRTとRESを取得し、それらを表示する必要があります。 私がこれまでに試したこと: getrusage(http://linux.die.net/man/2/getrusage) int who = RUSAGE_SELF; struct rusage usage; int ret; ret=getrusage(who,&usage); cout<<usage.ru_maxrss; しかし、私は常に0を取得します。

3
iPhoneOSのメモリ警告。異なるレベルはどういう意味ですか?
iPhone OSデバイスでメモリを管理するブラックアートについて:メモリ警告のさまざまなレベルはどういう意味ですか。レベル1?レベル2?ダイヤルは11になりますか? コンテキスト:iPodミュージックプレーヤーアプリを再生しながらiPadアプリを実行するなど、広範なメモリストレステスト期間の後、私は受け取ったランダムでありながらまれなメモリ警告を無視する傾向があります。私のアプリは決してクラッシュしません。これまで。私のアプリはリークフリーです。そして、まあ、MEMSの警告は問題ではないようです。 ありがとう、 ダグ

7
スタックメモリサイズがそれほど制限されているのはなぜですか?
ヒープにメモリを割り当てる場合、唯一の制限は空きRAM(または仮想メモリ)です。それはメモリのGbになります。 では、なぜスタックサイズがそれほど制限されているのですか(約1 Mb)?スタック上に本当に大きなオブジェクトを作成することを妨げる技術的な理由は何ですか? 更新:私の意図が明確でない可能性があります。スタックに巨大なオブジェクトを割り当てたくないので、より大きなスタックは必要ありません。この質問は純粋な好奇心です。

12
Cの `free`が解放されるバイト数を受け取らないのはなぜですか?
明確にするために:私はそれを知ってmallocおりfree、Cライブラリに実装されています。Cライブラリは通常、OSからメモリのチャンクを割り当て、独自の管理を行ってアプリケーションに少量のメモリを分割し、割り当てられたバイト数を追跡​​します。この質問は、無料がどれだけ解放するかをどのように知るかではありません。 むしろ、freeそもそもなぜこのように作られたのか知りたい。低水準言語であるため、Cプログラマーに、割り当てられたメモリだけでなく、どのくらいの量も追跡するように依頼するのは完全に合理的だと思います(実際、私は通常、バイト数を追跡​​することになります。とにかくmalloced)。また、バイト数を明示的に指定freeすると、パフォーマンスの最適化が可能になる場合があります。たとえば、割り当てサイズが異なる個別のプールを持つアロケータは、入力引数を確認するだけで、解放するプールを決定できます。全体的にスペースのオーバーヘッドが少なくなります。 だから、要するに、なぜし、mallocそしてfreeそれらは内部的に割り当てられたバイト数を追跡するために必要としているように作成?それは単なる歴史的な事故ですか? ちょっとした編集:「割り当てた金額とは異なる金額を解放したらどうなるか」などのポイントを提供している人もいます。私が想像したAPIは、割り当てられたバイト数を正確に解放するために1つを必要とするだけです。多かれ少なかれ解放することは、単にUBまたは実装定義である可能性があります。しかし、他の可能性についての議論を思いとどまらせたくはありません。

6
std :: get_temporary_bufferが必要なのはなぜですか?
どのような目的で使用する必要がありますstd::get_temporary_bufferか?標準は次のように言っています: 最大n個の隣接するTオブジェクトを格納するのに十分なストレージへのポインタを取得します。 バッファはスタックに割り当てられると思いましたが、そうではありません。C ++標準によると、このバッファは実際には一時的なものではありません。この関数には::operator new、オブジェクトも作成しないグローバル関数に比べてどのような利点がありますか。次のステートメントが同等であるというのは正しいですか? int* x; x = std::get_temporary_buffer<int>( 10 ).first; x = static_cast<int*>( ::operator new( 10*sizeof(int) ) ); この関数はシンタックスシュガーに対してのみ存在しますか?なぜtemporaryその名前にあるのですか? 1996年7月1日のDr.Dobb's Journalで、アルゴリズムを実装するための1つのユースケースが提案されました。 バッファを割り当てることができない場合、またはバッファが要求よりも小さい場合でも、アルゴリズムは正しく機能します。単に速度が低下するだけです。

8
Cの構造体とポインタのmalloc
ベクトルの長さとその値を表す構造を次のように定義するとします。 struct Vector{ double* x; int n; }; ここで、ベクトルyを定義し、それにメモリを割り当てたいとします。 struct Vector *y = (struct Vector*)malloc(sizeof(struct Vector)); インターネットで検索したところ、xにメモリを個別に割り当てる必要があることがわかりました。 y->x = (double*)malloc(10*sizeof(double)); しかし、y-> xにメモリを2回割り当てているようで、1つはyにメモリを割り当て、もう1つはy-> xにメモリを割り当てているようで、メモリの浪費のようです。コンパイラが実際に何をするのか、yとy-> xの両方を初期化する正しい方法を教えていただければ幸いです。 前もって感謝します。

11
割り当てられたメモリでfree()を使用しないことは問題ありませんか?
私はコンピュータ工学を勉強していて、いくつかの電子工学コースを持っています。私はそれを使用して回避することができる(これらのコースの)私の教授の2から、聞いたfree()(後に機能をmalloc()、calloc()おそらく割り当てられたメモリ空間は、他のメモリを割り当てるために再び使用されることはありませんので、など)。つまり、たとえば、4バイトを割り当ててから解放すると、4バイトのスペースができて、再び割り当てられない可能性があります。つまり、穴ができます。 私はそれがおかしいと思います:あなたはそれを解放せずにヒープにメモリを割り当てるおもちゃではないプログラムを持つことはできません。しかし、私には、それぞれにmalloc()がなければならないほど重要である理由を正確に説明する知識がありませんfree()。 だから:使用せmalloc()ずに使用することが適切であるかもしれない状況はありfree()ますか?そうでない場合は、どうすればこれを教授に説明できますか?

4
Objective C-割り当て、コピー、保持
私はObjectiveCを初めて使用します。ポインターの概念を含むCの基本的な知識があります。2つの基本的な質問があります。 誰かが割り当て、コピー、保持の違いをいくつかの例えで説明できますか? ポインター変数を返す関数をどのように処理し、リターンポインターを介してメッセージングをどのように実行しますか?

5
スタンフォードのチュートリアルとGCCの間の競合
この映画(約38分)によると、同じローカル変数を持つ2つの関数がある場合、それらは同じスペースを使用します。したがって、次のプログラムは、を出力する必要があります5。gcc結果とともにコンパイルします-1218960859。どうして? プログラム: #include <stdio.h> void A() { int a; printf("%i",a); } void B() { int a; a = 5; } int main() { B(); A(); return 0; } 要求に応じて、逆アセンブラからの出力は次のとおりです。 0804840c <A>: 804840c: 55 push ebp 804840d: 89 e5 mov ebp,esp 804840f: 83 ec 28 sub esp,0x28 8048412: 8b 45 f4 …

13
mallocの「ダブルフリー」エラーの原因を見つける方法は?
Objective-Cでアプリケーションをプログラミングしていますが、次のエラーが発生します。 MyApp(2121,0xb0185000)malloc:***オブジェクト0x1068310のエラー:ダブルフリー ***デバッグするmalloc_error_breakにブレークポイントを設定します NSAutoreleasePoolをリリースしたときに発生していて、2回リリースしているオブジェクトがわかりません。 彼のブレークポイントを設定するにはどうすればよいですか? この「オブジェクト0x1068310」が何であるかを知る方法はありますか?

4
__weak参照と__block参照の違いは何ですか?
Xcodeのドキュメントを読んでいますが、これが私を困惑させるものです。 __block typeof(self) tmpSelf = self; [self methodThatTakesABlock:^ { [tmpSelf doSomething]; }]; 以下はドキュメントからコピーされたものです。 ブロックは、キャプチャする変数への強力な参照を形成します。selfブロック内で使用する場合 、ブロックはへの強い参照を形成するため、ブロックへの強い参照もselfある場合 self(通常はそうなります)、強い参照サイクルが発生します。サイクルを回避する__blockには、上記の例のように、ブロックの外側に自分自身への弱い(または)参照を作成する必要があります。 「弱い(または__block)」の意味がわかりませんか? です __block typeof(self) tmpSelf = self; そして __weak typeof(self) tmpSelf = self; ここでもまったく同じですか? ドキュメントで別の部分を見つけました: 注:ガベージコレクション環境では、変数に__weakと__block修飾子の両方を適用すると 、ブロックはそれが存続することを保証しません。 だから、私は完全に困惑しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.