malloc_usable_size() - malloc()で確保したサイズを取得したい場合。
当時、何の用途で調べていたか忘れてしまいましたが、 malloc_usable_size()を使用するとmalloc()で確保したアドレスからサイズを取得出来ます。
#include <stdio.h> #include <stdlib.h> #include <malloc.h> int main( int argc, char **argv ) { if ( 2 != argc ) { printf("%s size\n",argv[0]); return 255; } size_t req_size = strtol(argv[1],NULL,10); char *p = malloc( req_size ); size_t size = malloc_usable_size ( p ); printf("req_size=%d,size=%d\n",req_size,size); free( p ); p = NULL; return 0; }
以下は実行結果です。
[user@localhost sample]$ ./a.out 1 req_size=1,size=12 [user@localhost sample]$ ./a.out 12 req_size=12,size=12 [user@localhost sample]$ ./a.out 13 req_size=13,size=20
malloc()に指定したサイズとmalloc_usable_size()の返り値が異なるのは malloc()内部でヒープ領域が一定のサイズに切り上げられて確保されているためだと考えられます。
参考サイト
malloc_usable_size(3) - Linux manual page
malloc(3)のメモリ管理構造 | VA Linux Systems Japan株式会社
環境
CentOS release 6.5 (Final) gcc-4.4.7-4.el6.i686 glib2-2.26.1-3.el6.i686