mallocされた領域のサイズを動的に知る

大体のallocatorでheader fieldが有るのでこういう事ができるはず。下の方のbitはフラグに使われてたりするのでアラインメントに合わせてクリアする。

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    size_t *buf = (size_t*)malloc(2048);
    size_t size = *(buf - 1);
    printf("size = %d\n", size & ~0xf);

    size_t *buf1 = (size_t*)malloc(1);
    size_t size1 = *(buf1 - 1);
    printf("size = %d\n", size1 & ~0xf);
}
vmkzk% gcc mallocheader.c; ./a.out
size = 2048
size = 16

64bit環境の人は適当に変えて下さい (id:kosakiさんのアドバイスにより変更)。しかしよく考えればfreeをO(1)でやるにはポインタからサイズを取得する必要が有るので、こういう事が出来るのは当り前か。