linux 指针参数所指向空间大小的计算 malloc realloc alloc 指针指向空间的大小的计算 malloc_chunk结构

原理:

glibc中的内存动态分配时通过一个结构来实现的

struct malloc_chunk
{
INTERNAL_SIZE_T prev_size; /* 如果前一个结构未使用则把这个填充为前一结构的size*/
INTERNAL_SIZE_T size; /* 本结构的size,最小16(本结构的大小),因为是8字节对齐,最后的三位用来做标记位 PREV_INUSE(最后一位用来标记前一结构是否使用)  IS_MMAPPED 用来标记
此内存块是不是由mmap()分配在free中会用到*/
struct malloc_chunk* fd; /* 如果本结构未使用则由fd bk双向链表来填充,如果使用则是malloc/alloc/realloc的返回首地址 */
struct malloc_chunk* bk;
};

 

#include <malloc.h>
#define PREV_INUSE 0x1
#define IS_MMAPPED 0x2
#define SIZE_BITS PREV_INUSE|IS_MMAPPED
#define chunksize(p) (*(((unsigned int *)p)-1) & ~(SIZE_BITS))//取出size去掉后两标志位影响,8字节对齐


void getPSize(void * p)
{
 int size = chunksize(p);
 printf("malloc size is %d",size - 8); 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值