您尚未登录。

#1 2021-04-15 13:57:01 分享评论

flex-A
会员
注册时间: 2019-08-27
已发帖子: 21
积分: 20.5

运行main前到底经历了什么?【瞎折腾系列】

小弟实现了个内存管理的库,叫memfox smile,用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;
}

运行结果:
memfox.jpg

为啥程序会在main调用malloc之前,甚至memfox初始化之前申请了2个4B的空间?

离线

#2 2021-04-16 09:29:06 分享评论

JasonWoo
会员
注册时间: 2019-06-04
已发帖子: 77
积分: 67

Re: 运行main前到底经历了什么?【瞎折腾系列】

用gdb调试下

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn