Linuxでmallocが実際に割り当てたメモリサイズを取得

4161 ワード

使用する関数のプロトタイプは次のとおりです.
#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倍の数を得ることができます.