問題タブ [sbrk]
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 - malloc と sbrk が別々のセグメントからアドレスを返すのはなぜですか?
動的メモリ割り当てがどのように行われているかを理解しようとしています。そこで、sbrk()
システムコールを使って独自の malloc を実装することを考えました。ここでの私の質問は、動的メモリを割り当てようとすると、sbrk() と malloc() が連続していない異なるアドレスを返すことです。
これが私のコードです
上記のコードの出力は
sbrk(8)
連続した場所ではない理由を誰でも説明できますか。
c - パディングバイトは、メモリアロケータで割り当てられているか割り当てられていないと見なされますか?
私は自分のプログラムでカスタム メモリ アロケータを作成しており、割り当てられたメモリと割り当てられていないメモリをよりよく理解しようとしています。基本的な「単純な」sbrk()
メモリ アロケータの場合、 への呼び出しはsbrk()
16 バイト (の倍数) にアラインされたサイズを提供する必要があると言われています。これは、たとえば 5 バイトのメモリを割り当てる必要がある場合、演算 (5 + (16-1)) & ~(16-1)) が適用され、この場合は 16 に切り上げられることを意味します。要求されたサイズが 5 ではなく 17 の場合、32 に丸められます。
これは、アライメントのためにユーザーが要求したよりも多くのバイトがオペレーティング システムから返されていることを意味します。私の質問は、11 バイト (最初の例の場合) または 15 バイト (2 番目の例の場合) が「割り当てられている」と見なされるかどうかです。メモリ アロケータの適切な実装では、ユーザーは実際に、要求されたサイズと 16 バイト境界の間で、要求されたバイト数を超えて使用できますか? そうでない場合、これはどのように実施されますか?