問題タブ [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.
optimization - メモリ割り当ての時間計算量
new、mallocなどを使用した動的メモリ割り当ての時間計算量は? 私はメモリ アロケータがどのように実装されているかについてほとんど知りませんが、その答えは実装に依存するということだと思います。したがって、より一般的なケース/実装のいくつかについて回答してください。
編集:最悪の場合、ヒープ割り当てが無制限であると聞いたのを漠然と覚えていますが、平均/典型的なケースに本当に興味があります。
c - C で特定のビット数を割り当てることはできますか?
実行時に決定される大量のブール情報を保存しようとしています。最善の方法は何だろうと考えていました。
私は現在、以下を使用してメモリを割り当てようとしています:
pStatus = malloc((<number of data points>/8) + 1);
これで作業するのに十分なビットが得られると考えています。次に、配列表記のポインターを使用して、各ブール値を参照できます。
pStatus[element]
残念ながら、これはうまく機能していないようです。まず、メモリを整数値に初期化するのに苦労しています0
。これを使用して行うことができますmemset()
か? それでも、アクセスしようとするとクラッシュする理由に影響しているとは思いませんpStatus[element]
。
また、このアプローチが使用するのに最適であると完全に確信しているわけではありません。私が本当に欲しいのは、本質的にブール値のステータスを反映する巨大なビットマスクです。私は何かを逃しましたか?
c++ - malloc/free が呼び出されるたびに stderr に出力する
Linux/GCC/C++ では、malloc/free/new/delete が呼び出されるたびに何かを stderr に記録したいと考えています。ライブラリのメモリ割り当てを理解しようとしているので、単体テストの実行中にこの出力を生成したいと思います。メモリ リークの検出に valgrind を使用していますが、割り当てだけをログに記録するオプションが見つかりません。
何か案は?可能な限り簡単な解決策を探しています。ライブラリの再コンパイルはオプションではありません。
windows - malloc が RSP と RSP+8 を上書きするのはなぜですか?
64 ビットの呼び出し規約については、こちらを参照してください。x64 関数は自分自身でクリーンアップするはずですが、.asm から malloc を呼び出すと、RSP と RSP+8 の値が上書きされます。これは非常に間違っているようです。助言がありますか?
c - char x[256] 対 char* = malloc(256*sizeof(char));
ここの誰かが最近、私が使用している私のコードの一部で私に指摘しました
このアレイのセットアップ方法は、
どちらの方法でも free() を使用する必要があります。私は間違っていますか?もしそうなら、誰かが低レベルの用語で違いを説明してもらえますか?
c - C構造体を解放するには?
与えられた構造体、例えば
次のコード (IPhone で実行されている Objective-C クラスのコンテキストで) が「解放されているアライメントされていないポインター」例外をスローするのはなぜですか?
NB私の究極の目標は、多くのベクトル数学関数を備えたCライブラリを使用することです。したがって、CとObjective-Cを混在させる実行可能な方法を見つける必要があります
c - malloc が要求したバイト数と異なるバイト数を割り当てるのはなぜですか?
私はこのコードを持っています
これは、最後に割り当てられたブロック サイズ (16 または 1024) を出力するべきではありませんか? 代わりに 24 と 1032 が出力されるため、割り当てられたメモリの量には 8 バイト余分にあるようです。
私の問題は、(このテスト ケースを作成する前に)malloc()
関数 (1024 バイト) で実行し、割り当てられた結果を返すことです。関数の戻り値でブロック サイズを確認すると、516 ブロックが返されます... 理由がわかりません。これが、割り当てられたバッファで何らかの処理を行った後に発生するメモリ破損の理由である可能性があると思います:)
編集: C のポインターから配列のサイズを取得するにはどうすればよいですか? 同じことを尋ねているようです、再投稿してすみません。
例をより具体的なコードに書き直しました。
そして、出力は
1024より大きい上記の投稿によると、私は間違っていますか?
c - Cの可変サイズ配列とcalloc
ここでの動的メモリの議論について:「Cポインタと動的メモリの紹介」
著者は次のように述べています。
このようなメモリ ブロックは、より柔軟な配列として効果的に使用できます。このアプローチは、実際には実際の C プログラムではより一般的です。また、「可変サイズ配列」よりも予測可能で柔軟です。
彼が話しているメモリブロックのタイプは次のとおりです。
次に、別のポインターを使用して配列を反復処理します。
私の質問は、この方法が、このような標準の可変サイズの配列よりも優れている点です:
または動的:
著者は、私が後者よりも前者の方法を好む理由についてあまり明らかにしていません。またはより具体的には、どのように「予測可能で柔軟」になりますか?
performance - メモリ割り当て/割り当て解除のボトルネック?
典型的な実世界のプログラムにおけるメモリの割り当て/割り当て解除は、どの程度のボトルネックですか? 通常、パフォーマンスが問題となるあらゆる種類のプログラムからの回答を歓迎します。malloc/free/garbage collection の適切な実装は、いくつかのまれなケースでボトルネックにすぎないほど十分に高速であるか、またはほとんどのパフォーマンスが重要なソフトウェアは、メモリ割り当ての量を抑えようとするか、より高速な malloc/free/ を使用することで大幅にメリットがありますガベージコレクションの実装?
注:ここではリアルタイムのことについて話しているわけではありません。パフォーマンスが重要とは、スループットが重要であるものの、レイテンシが必ずしも重要ではないことを意味します。
編集: malloc について言及していますが、この質問はC/C++ 固有のものではありません。