OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2902|回复: 1

关于动态申请内存mymalloc是否可靠的问题?

[复制链接]

10

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2017-3-20
在线时间
30 小时
发表于 2018-5-3 14:22:37 | 显示全部楼层 |阅读模式
5金钱
一直用mymalloc()也没有发现问题,今天发现我动态申请的数据总是被改变,查到最后发现是另一处动态申请的时候就一定会导致我前面申请的数据被改变
所以打印一下申请的内存地址和长度
第一个申请的数据首地址1745783648,长度84
第二个申请的数据首地址1745783680,长度4
第三个申请的数据首地址1745783616,长度4
按照从高到低的申请方法,地址范围依次是
1745783564--1745783648
1745783676--1745783680
1745783612--1745783616
第一快内存包括了第三块内存,附上mymalloc代码
u32 my_mem_malloc(u8 memx,u32 size)  
{  
        signed long offset=0;  
        u32 nmemb;        //需要的内存块数  
        u32 cmemb=0;//连续空内存块数
        u32 i;  
        if(!mallco_dev.memrdy[memx])mallco_dev.init(memx);//未初始化,先执行初始化
        if(size==0)return 0XFFFFFFFF;//不需要分配
        nmemb=size/memblksize[memx];          //获取需要分配的连续内存块数
        if(size%memblksize[memx])nmemb++;  
        for(offset=memtblsize[memx]-1;offset>=0;offset--)//搜索整个内存控制区  
        {     
                if(!mallco_dev.memmap[memx][offset])cmemb++;//连续空内存块数增加
                else cmemb=0;                                                                //连续内存块清零
                if(cmemb==nmemb)                                                        //找到了连续nmemb个空内存块
                {
                        for(i=0;i<nmemb;i++)                                          //标注内存块非空
                        {  
                                        mallco_dev.memmap[memx][offset+i]=nmemb;  
                        }  
                        return (offset*memblksize[memx]);//返回偏移地址  
                }
        }  
        return 0XFFFFFFFF;//未找到符合分配条件的内存块  
}


我的设置是32个字节的长度分块,我考虑是不是我第一个数据里有4字节的空位导致分配出错?但是分配的时候已经在管理表里标记了这段内存已分配了,
百思不解,原子哥?

最佳答案

查看完整内容[请看2#楼]

申请长度至少32字节,你申请4字节,也是分配32字节给你的。mymalloc是很可靠的,经过很多验证了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-5-3 14:22:38 | 显示全部楼层
申请长度至少32字节,你申请4字节,也是分配32字节给你的。mymalloc是很可靠的,经过很多验证了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-6 22:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表