0

私は自分のプログラムでカスタム メモリ アロケータを作成しており、割り当てられたメモリと割り当てられていないメモリをよりよく理解しようとしています。基本的な「単純な」sbrk()メモリ アロケータの場合、 への呼び出しはsbrk()16 バイト (の倍数) にアラインされたサイズを提供する必要があると言われています。これは、たとえば 5 バイトのメモリを割り当てる必要がある場合、演算 (5 + (16-1)) & ~(16-1)) が適用され、この場合は 16 に切り上げられることを意味します。要求されたサイズが 5 ではなく 17 の場合、32 に丸められます。

これは、アライメントのためにユーザーが要求したよりも多くのバイトがオペレーティング システムから返されていることを意味します。私の質問は、11 バイト (最初の例の場合) または 15 バイト (2 番目の例の場合) が「割り当てられている」と見なされるかどうかです。メモリ アロケータの適切な実装では、ユーザーは実際に、要求されたサイズと 16 バイト境界の間で、要求されたバイト数を超えて使用できますか? そうでない場合、これはどのように実施されますか?

4

3 に答える 3