問題タブ [malloc]
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 または c++ で非常に大きな単一のメモリ チャンク (> 4GB) を割り当てることができますか?
私が疑問に思っていた最近の非常に大量の RAM では、4GB を超えるメモリの単一のチャンクを割り当てることは可能ですか? それとも、小さなチャンクをたくさん割り当てて、それらの間の切り替えを処理する必要がありますか?
どうして???私はいくつかの openstreetmap xml データの処理に取り組んでおり、これらのファイルは巨大です。それらをすべて 1 つのチャンクにロードすることはできないため、現在それらをストリーミングしていますが、malloc または new の上限に興味がありました。
c++ - どのような場合にmallocおよび/またはnewを使用しますか?
C ++では、データを割り当てて解放する方法が複数あることがわかります。電話をかけるときmalloc
は電話をかけ、演算子free
を使用するときnew
はペアリングする必要がdelete
あり、2つを組み合わせるのは間違いです(たとえば、free()
作成されたものを呼び出す)new
演算子を使用)が、実際のプログラムで/をいつ使用する必要があるのか、および/をいつ使用する必要があるのかが明確ではありませmalloc
んfree
。new
delete
C ++の専門家の方は、この点に関して従う経験則や規則を教えてください。
operating-system - malloc/free 以外に、プログラムは OS が何かを提供する必要がありますか?
私が取り組んでいる OS 用のカーネル (実際には「コア」と呼んでいますが、基本的には同じです) の設計に取り組んでいます。マルチタスキングやメモリ管理などの基本的なことができなければ、OS 自体の詳細は関係ないので、まずはそこから取り組む必要があります。malloc ルーチンの設計について質問があります。
malloc() はカーネル自体の一部 (私はこれに傾倒しています) またはプログラムの一部になると考えていますが、C 標準ライブラリの独自の実装を作成する必要があります。というわけで、malloc を書きます。この点に関して、私の質問は実際にはかなり単純です。C (または C++) はそのヒープをどのように管理しますか?
私が理論の授業でいつも教えられてきたのは、ヒープは指定されたアドレスから始まり、多くの意味でスタックのように振る舞うメモリの断片であるということです。このようにして、グローバルスコープで宣言された変数が最初にあり、それぞれのスコープで宣言されると、より多くの変数がヒープに「プッシュ」され、スコープ外に出る変数は単にメモリ空間に残されることがわかります。ただし、そのスペースは空きとしてマークされているため、必要に応じてヒープをさらに拡張できます。
私が知る必要があるのは、C がこのように動的に拡大するヒープを実際にどのように処理するのかということです。コンパイルされた C プログラムは、malloc ルーチンへの独自の呼び出しを行い、独自のヒープを処理しますか? それとも、自動的に拡張するスペースを提供する必要がありますか? また、C プログラムはヒープの開始位置をどのように認識していますか?
ああ、同じ概念が他の言語にも当てはまることは知っていますが、私はその言語に最も慣れているので、例を C/C++ にしたいと思います。スタックなど他のことも気にしないようにしたいと思います。このようなことは自分で処理できると思います。
したがって、私の本当の質問は、malloc/free (ページ自体の取得と解放などを処理する) 以外に、プログラムは OS が他に何かを提供する必要があるのでしょうか?
ありがとう!
EDIT mallocルーチン自体の実際の動作よりも、Cがヒープに関連してmallocを使用する方法に興味があります。それが役立つ場合、私はこれを x86 で実行していますが、C はクロス コンパイラであるため、問題にはなりません。^_^
さらに編集:用語が混乱している可能性があることを理解しています。「ヒープ」は、プログラムがグローバル/ローカル変数などを格納する場所であると教えられました。私はアセンブリ プログラミングで「スタック」を扱うことに慣れていましたが、代わりにおそらくそれを意味していることに気付きました。私のちょっとした調査によると、「ヒープ」は、プログラムがそれ自体に割り当てた合計メモリ、または OS が提供したメモリのページの合計数 (および順序) を指すのによく使用されます。
それで、それを念頭に置いて、拡大し続けるスタックにどのように対処すればよいでしょうか? (私の C 理論の授業は軽度の... 欠陥があったようです。)
c - Mallocエラー:解放されたオブジェクトのチェックサムが正しくありません
私は課題のテールの実装に取り組んでいます。私はそれを正しく動作させていますが、ランダムな時間に無料でエラーが発生しているようです。
一貫性がある以外のパターンや何かにそれを追跡するために、私は見ることができません。
たとえば、プログラムを「tail -24 test.in」と呼ぶと、複数回実行すると同じ行で誤ったチェックサムエラーが発生します。ただし、ファイルが異なり、印刷する行数が異なる場合でも、エラーなしで戻ってきます。
問題を追跡する方法についてのアイデアは、何時間も無駄にデバッグしようとしてきました。
問題のあるコードは次のとおりです。
行はchar**として定義され、mallocは次のようになります。
c - Cのポインターから配列のサイズを取得するにはどうすればよいですか?
次のようなmystruct
サイズの「配列」を割り当てました。n
後で、私は にしかアクセスできp
なくなりましn
た。ポインタだけを指定して配列の長さを決定する方法はありますp
か?
まさにそれを行うので、それは可能でなければならないfree(p)
と思います。私malloc()
は、割り当てられたメモリの量を追跡していることを知っています。それが長さを知っている理由です。おそらく、この情報を照会する方法はありますか? 何かのようなもの...
わかるようにコードを作り直す必要があることはわかっていますが、できればそうしn
たくありません。何か案は?
c++ - Windows C コードでのメモリ割り当て
Windows C プログラミングでどの方法が推奨されているか知りたいです: malloc または Win32 HeapAlloc (おそらく VirtualAlloc?) 関数を使用します。
MSDN のメモリ管理関数の記事と、malloc と HeapAlloc に関する MSDN の記事を読みましたが、どちらをどのような状況で使用すべきかについては言及されていません。
c - C で malloc と free のラッパー関数を作成する
メモリ リークを通知するために、C用free
およびC用のラッパー関数を作成しようとしています。malloc
これらの関数を宣言する方法を知っている人はいますか?私が呼び出すmalloc()
とfree()
、標準ライブラリ関数ではなくカスタム関数が呼び出されますか?
memory - SafeArrayGetElem 呼び出しからメモリを解放しますか?
com ラッパーを持つ C# のコードがいくつかあります。この com ラッパーは、ネイティブの C++ アプリケーションで使用されます。C++ コードは、c# ライブラリからクラスのインスタンスの配列を返すメソッドを使用します。インスタンスは、次のような SafeArray から取得されます。
インスタンスlに割り当てられたメモリを解放したいのですが、呼び出すと
その後、クラッシュします。
私が試してみました
と使用
しかし、配列内の各インスタンスに対してまだ 4 バイトがリークしています。
このメモリを解放するにはどうすればよいですか?
c - Malloc フックの使用
カスタム関数 my_malloc() を作成するために malloc フックを使用しようとしています。メインプログラムで malloc() を呼び出すときに my_malloc() を呼び出したいのですが、誰かが C でこれを行う方法の例を教えてください。
c - 何かがマロックされたかどうかを確認する
ある変数へのポインタが与えられた場合、それが静的に割り当てられたか動的に割り当てられたかを確認する方法はありますか?