Linuxでmallocが実際に割り当てたメモリサイズを取得
4161 ワード
使用する関数のプロトタイプは次のとおりです.
以下のテストを行いました
印刷されたntemの値は24であり、割り当てられたメモリサイズが24以下であれば常にntemの値は24であり、25に大きくなると
印刷結果の検出:ntem:40
結論:1、malloc割り当ての最小サイズは24バイトで、私のマシンは64ビットで、マシンと関係があるかもしれません2、割り当てのサイズが24バイトより大きい場合、例えば25バイトを割り当てたい場合、これより少し大きいメモリを割り当てるかもしれません
理由:Linuxはメモリ割り当てを処理し、一定サイズのメモリオブジェクトプールを作成します.割り当て要求は、十分なオブジェクトを有するプールに入り、メモリブロック全体を要求者に渡すように処理される.カーネルには、所定のサイズのバイト配列しか割り当てられません.任意の数のメモリを要求すると、要求よりもわずかに多く、最大2倍の数を得ることができます.
#include
size_t malloc_usable_size(void *_ptr)
以下のテストを行いました
void malloc_test()
{
char *array = (char *)malloc(1 * sizeof(char));
int ntem = malloc_usable_size(array);
printf("ntem: %d
", ntem);
free(array);
}
印刷されたntemの値は24であり、割り当てられたメモリサイズが24以下であれば常にntemの値は24であり、25に大きくなると
void malloc_test()
{
char *array = (char *)malloc(25 * sizeof(char));
int ntem = malloc_usable_size(array);
printf("ntem: %d
", ntem);
free(array);
}
印刷結果の検出:ntem:40
結論:1、malloc割り当ての最小サイズは24バイトで、私のマシンは64ビットで、マシンと関係があるかもしれません2、割り当てのサイズが24バイトより大きい場合、例えば25バイトを割り当てたい場合、これより少し大きいメモリを割り当てるかもしれません
理由:Linuxはメモリ割り当てを処理し、一定サイズのメモリオブジェクトプールを作成します.割り当て要求は、十分なオブジェクトを有するプールに入り、メモリブロック全体を要求者に渡すように処理される.カーネルには、所定のサイズのバイト配列しか割り当てられません.任意の数のメモリを要求すると、要求よりもわずかに多く、最大2倍の数を得ることができます.