小弟实现了个内存管理的库,叫memfox ,用memfox替换系统自带的malloc函数时发生了一个有意思的现象。
测试场景:
*minGW-GCC
*用memfox替换掉malloc的实现
void *malloc(size_t size)
{
if(size<1024)
printf("memfox malloc:%dB\n",size);
else
printf("memfox malloc:%dKB\n",size>>10);
return memfox_malloc(size);
}
void free(void *ptr)
{
uint8_t *p=(uint8_t*)ptr;
printf("memfox free @ 0x%X ",ptr);
if((membuf<=p)&&(p<(membuf+1024*1024)))
memfox_free(ptr);
else
{
printf("[out of range]\n");
ptr=NULL;
}
}
*定义一个大数组membuf并交给memfox管理
uint8_t membuf[1024*1024];
int main(int argc, char *argv[])
{
uint8_t *InputBuffer;
//memfox
printf("->");
memfox_init(membuf,1024*1024);
printf("memfox init @ 0x%X\n",membuf);
//memfox test
InputBuffer=(uint8_t*)malloc(4096);
free(InputBuffer);
return 0;
}
运行结果:
为啥程序会在main调用malloc之前,甚至memfox初始化之前申请了2个4B的空间?
离线
用gdb调试下
离线