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

メモリとは、コンピュータまたはその他のデジタル電子デバイスで使用するために、プログラムまたはデータを一時的または永続的に格納するために使用される物理デバイスを指します。

10
ガベージコレクションを強制するのはいつですか?
だから私は、C#ガベージコレクターを強制的に実行することについての質問を読んでいた。ほとんどすべての回答が同じである。残念ながら、そのようなケースについて詳しく説明している人はいません。 ガベージコレクションを強制するのは、実際にはどのようなシナリオで良いまたは合理的なアイデアであるかを教えてもらえますか? 私はC#固有のケースではなく、ガベージコレクターを備えたすべてのプログラミング言語を求めています。Javaのようなすべての言語でGCを強制することはできませんが、できると仮定しましょう。

15
メソッドのメモリとパフォーマンスの速度を最適化するタイミング
私は最近Amazonでインタビューしました。コーディングセッション中に、インタビュアーはメソッドで変数を宣言した理由を尋ねました。私は自分のプロセスを説明し、彼はより少ない変数で同じ問題を解決するように私に挑戦しました。例えば、私が開始(これはインタビューからではなかった)方法A、次いで向上にそれを、方法B除去することによってint s。彼は喜んでおり、これはこの方法によってメモリ使用量を減らすだろうと言った。 私はその背後にあるロジックを理解していますが、私の質問は次のとおりです。 方法Aと方法B、またはその逆を使用するのが適切な場合 メソッドAがint s宣言されているため、メモリ使用量が高くなることがわかりますが、実行する必要があるのは1つの計算だけa + bです。一方、方法Bではメモリ使用量は少なくなりますが、a + b2回、つまり2回計算する必要があります。あるテクニックを他のテクニックよりもいつ使用するのですか?または、テクニックの1つは常に他よりも優先されますか?2つの方法を評価する際に考慮すべきことは何ですか? 方法A: private bool IsSumInRange(int a, int b) { int s = a + b; if (s > 1000 || s < -1000) return false; else return true; } 方法B: private bool IsSumInRange(int a, int b) { if (a + b …

6
Javaのスタックメモリとヒープメモリ
私が理解しているように、Javaでは、スタックメモリはプリミティブとメソッド呼び出しを保持し、ヒープメモリはオブジェクトの格納に使用されます。 クラスがあると仮定します class A { int a ; String b; //getters and setters } aクラスのプリミティブはどこAに格納されますか? ヒープメモリが存在するのはなぜですか?なぜすべてをスタックに保存できないのですか? オブジェクトがガベージコレクションされると、オブジェクトに関連付けられたスタックは破棄されますか?

6
代わりにdoubleが主に推奨されるのに、なぜfloatがJava言語の一部であるのはなぜですか?
私が見たすべての場所で、それはほぼすべての点doubleで優れていると言いfloatます。Javaでfloat廃止さdoubleれたのに、なぜまだ使用されているのですか? 私はLibgdxで多くのプログラムを作成しており、それらを使用することを強制していますfloat(deltaTimeなど)が、doubleストレージとメモリの点で作業する方が簡単だと思われます。 私はまた、いつfloatを使用し、doubleを使用するのかを読んでいますが、float本当に小数点以下の桁数が多い数値にのみ適している場合、なぜ多くのバリエーションの1つを使用できないのdoubleですか? もはや利点がなくなっても、人々がフロートを使用することを主張する理由はありますか?すべてを変更するのは大変な作業ですか?

11
スペースの強化に対処しましたか?
スペースの強化に関しては、ベストプラクティスを研究したいと強く思っています。たとえば、私は(もう記事を見つけることはできませんが)火星探査機の中核部分は動的メモリ割り当てを使用していないことを読んでおり、実際には禁止されていました。私はまた、昔ながらのコアメモリが宇宙で好ましいかもしれないことを読みました。 Google Lunar Challengeに関連するいくつかのプロジェクトを見て、月に、または宇宙にさえコードを入れるのはどんな感じだろうと思っていました。スペースが強化されたボードは、このような過酷な環境である程度の健全性を提供することを知っていますが、(Cプログラマーとして)宇宙で実行する何かを書いている場合、どのように思考とコードを調整する必要があるのでしょうか? 私は今後数年間でプライベートスペース企業の成長がさらに見込めると思うので、少なくともベストプラクティスについてある程度知識を持ちたいと思っています。 断熱材に損傷を与えたボードに放射線、寒さ、または熱が衝突すると、プログラムはどうなりますか?目標は、宇宙船内に人間を置き(物の修理や交換に関する限り)、物事を修理するミッションを避けることだと思います。 さらに、ボードが重要なシステムを維持している場合、早期の警告が最優先されるようです。 テストと試行錯誤を通して、この経験をどのように得ることができますか(あなた自身の個人的な衛星の打ち上げがなければ)?
62 c  memory 

6
CPUキャッシュメモリが非常に高速なのはなぜですか?
CPUキャッシュメモリをメインメモリよりもはるかに高速にするのはなぜですか?階層型キャッシュシステムにはいくつかの利点があります。キャッシュが小さいほど検索が高速になることは理にかなっています。しかし、それにはもっとあるはずです。
58 memory  caching 

5
パックマンのゲームの「レベル256バグ」は、未処理のセグメンテーション違反と見なすことができますか?
私はセグメンテーションフォールトを誰かに説明しようとしていますが、Pacmanのレベル256キルスクリーン、整数オーバーフローによってトリガーされる方法、およびセグメンテーションで説明されている「不明な状態」と動作がどのように似ているかを考えていました障害。 これは私が「未処理のセグメンテーション違反」と呼ぶものの良い例だと言いたいのですが、誤った情報を広める可能性がある前にセカンドオピニオンを得たいと思います。 調べてみましたが、バグ自体に関するドキュメントと、Hipster WhaleとNamcoの間のコラボレーションだけが手に入ります。 それで、Pacmanのレベル256の動作は、未処理のセグメンテーション違反の例だと考えますか?
51 memory  errors 

3
なぜスタックを後方に拡張するのですか?
Cコードをコンパイルしてアセンブリを見ると、スタックは次のように後方に成長します。 _main: pushq %rbp movl $5, -4(%rbp) popq %rbp ret -4(%rbp)-これは、ベースポインタまたはスタックポインタが実際にメモリアドレスを上に移動する代わりに下に移動することを意味しますか?何故ですか? に変更$5, -4(%rbp)し$5, +4(%rbp)、コンパイルしてコードを実行しましたが、エラーはありませんでした。では、なぜメモリスタックをさかのぼる必要があるのでしょうか?
46 c  memory  assembly 

4
null値はどこに保存されますか、それともまったく保存されますか?
null値またはnull参照について学びたいです。 たとえば、Appleというクラスがあり、そのインスタンスを作成しました。 Apple myApple = new Apple("yummy"); // The data is stored in memory それから私はそのリンゴを食べました、そして今、それはヌルである必要があるので、それをヌルとして設定します。 myApple = null; この電話の後、私はそれを食べたことを忘れてしまったので、確認したいと思います。 bool isEaten = (myApple == null); この呼び出しで、myAppleはどこを参照していますか?nullは特別なポインター値ですか?その場合、1000個のnullオブジェクトがある場合、ポインター型をintと見なすと、1000個のオブジェクトメモリスペースまたは1000個のintメモリスペースを占有しますか?
39 memory  null 

8
C ++では、メモリ管理にプログラマーが費やす時間
ガベージコレクションされた言語に慣れている人は、C ++のメモリ管理が怖いことがよくあります。そこのツールは次のように、あるauto_ptrとshared_ptrそれはあなたのためのメモリ管理タスクの多くを処理します。多くのC ++ライブラリはこれらのツールより前のものであり、メモリ管理タスクを処理する独自の方法があります。 メモリ管理タスクにどれくらいの時間を費やしていますか? 使用するライブラリのセットに大きく依存しているのではないかと思われるので、どのライブラリに答えが当てはまるか、それらが良くなるか悪くなるかを言ってください。
39 c++  memory 

10
変数とメモリ位置の違いは何ですか?[閉まっている]
最近、フラッシュカードのように、ポインタを視覚的に説明しようとしています。 質問001:これは、コンピューターのメモリ内の場所の描画です。その住所は本当0x23452ですか?どうして? 回答:はい、0x23452コンピューターがこの場所を見つけることができる場所について説明しているためです。 質問002:文字bがメモリの場所に保存されているのは本当0x23452ですか?どうして? 回答:いいえa。キャラクターは実際にその中に保存されているためです。 質問003:ポインターがメモリの場所に保存されているのは本当0x23452ですか?どうして? 回答:はい、メモリロケーションのアドレスは0x34501内部に保存されているためです。 質問004:ポインターがメモリの場所に保存されているのは本当0x23452ですか?どうして? 回答:はい、別のメモリ位置のアドレスが内部に保存されているためです。 今、私が心配している部分について。ソフトウェアエンジニアは、次のように私へのポインタを説明しました。 ポインタは、値が別の変数のメモリアドレスである変数です。 すべてを紹介した4つのフラッシュカードに基づいて、少し異なる方法でポインターを定義します。 ポインタは、値が別のメモリ位置のメモリアドレスであるメモリ位置です。 変数はメモリの場所と同じだと言っても安全ですか? そうでない場合は、誰が正しいですか?変数とメモリ位置の違いは何ですか?

1
最新のCPUでの単一割り当てADT指向コードのパフォーマンス
単一の割り当てで不変データを操作すると、より多くのメモリが必要になるという明らかな効果があります。これは、常に新しい値を作成しているためです(ただし、隠れたコンパイラーはポインタートリックを実行して問題を軽減します)。 しかし、CPU(具体的にはそのメモリコントローラー)がメモリが(それほど)変化していないという事実を利用できるという点で、パフォーマンスの低下よりもパフォーマンスの低下を上回ることを何度か耳にしました。 私は誰かがこれが本当であるかどうか(またはそうでない場合)に光を当てることを望んでいました。 で別のポストにコメントそれがいることを言及した抽象データ型(ADTのは)私は、さらに好奇心作られたこれに関係しています、どのようにADTは、具体的にメモリとCPUの取引方法に影響しますか?ただし、これは別ですが、ほとんどの場合、言語の純度がCPUおよびそのキャッシュなどのパフォーマンスに必ず影響することに興味があります。

5
数値が大きすぎる場合、次のメモリ位置にあふれますか?
私はCプログラミングをレビューしてきましたが、気になっていることがいくつかあります。 例としてこのコードを見てみましょう: int myArray[5] = {1, 2, 2147483648, 4, 5}; int* ptr = myArray; int i; for(i=0; i<5; i++, ptr++) printf("\n Element %d holds %d at address %p", i, myArray[i], ptr); intは正の2,147,483,647の最大値を保持できることを知っています。それで、それを越えて、次のメモリアドレスに「あふれ」、そのアドレスで要素2が「-2147483648」として表示されるのでしょうか。しかし、出力では次のアドレスが値4、5を保持していることを示しているため、それは実際には意味がありません。数値が次のアドレスにあふれた場合、そのアドレスに格納されている値は変更されません? MIPS Assemblyでのプログラミングと、プログラム中にアドレスが値を変更するのを見て、それらのアドレスに割り当てられた値が変わることを漠然と覚えています。 間違って覚えていない限り、別の質問があります:特定のアドレスに割り当てられた番号がタイプ(myArray [2]のように)よりも大きい場合、後続のアドレスに格納されている値には影響しませんか? 例:int myNum = 40億がアドレス0x10010000にあります。もちろん、myNumは40億を保存できないため、そのアドレスでは負の数として表示されます。この大きな数を格納することはできませんが、後続のアドレス0x10010004に格納されている値には影響しません。正しい? メモリアドレスには、特定のサイズの数字/文字を保持するのに十分なスペースがあり、サイズが制限を超えた場合、異なるように表示されます(intに40億を格納しようとしているが、負の数として表示されます)そのため、次のアドレスに保存されている数字/文字には影響しません。 船外に行ったら申し訳ありません。私はこれから一日中大きな脳のおならをしていました。

2
C文字列リテラルが読み取り専用なのはなぜですか?
文字列リテラルが読み取り専用であることの利点は、以下を正当化(-ies / -ied)します: 足で自分を撃つ別の方法 char *foo = "bar"; foo[0] = 'd'; /* SEGFAULT */ 1行で単語の読み書き配列をエレガントに初期化できない: char *foo[] = { "bar", "baz", "running out of traditional placeholder names" }; foo[1][2] = 'n'; /* SEGFAULT */ 言語自体を複雑にします。 char *foo = "bar"; char var[] = "baz"; some_func(foo); /* VERY DANGEROUS! */ some_func(var); /* …
29 c  memory  strings 

8
メモリの割り当てをいつ解除するかを静的に予測することは可能ですか?ソースコードからのみですか?
メモリ(およびリソースロック)は、プログラムの実行中の確定的なポイントでOSに返されます。プログラムの制御フローだけで、特定のリソースの割り当てを確実に解除できる場所を知るのに十分です。人間のプログラマーがfclose(file)、プログラムが完了したときにどこに書くべきかを知っているように。 GCは、制御フローが実行されるランタイム中に直接把握することでこれを解決します。しかし、制御フローについての真実の本当のソースはソースです。したがって、理論的にはfree()、ソース(またはAST)を分析することで、コンパイルの前に呼び出しを挿入する場所を決定できるはずです。 参照カウントはこれを実装するための明らかな方法ですが、ポインターがまだ参照されている(まだスコープ内にある)けれども不要になった状況に遭遇するのは簡単です。これは、ポインタを手動で割り当て解除する責任を、それらのポインタへのスコープ/参照を手動で管理する責任に変換するだけです。 プログラムのソースを読み取ることができるプログラムを作成することが可能であるように思われます。 プログラムの制御フローのすべての順列を予測する---プログラムのライブ実行を監視するのと同様の精度 割り当てられたリソースへのすべての参照を追跡する 参照ごとに、参照が絶対に参照解除されないことが保証される最も早いポイントを見つけるために、後続の制御フロー全体をトラバースします。 その時点で、ソースコードのその行に割り当て解除ステートメントを挿入します すでにこれを行うものはありますか?RustやC ++スマートポインター/ RAIIは同じものだとは思わない。
27 parsing  memory 

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