找回密码
 注册
搜索
查看: 1099|回复: 5

MTK动态分配内存

[复制链接]
发表于 2007-1-20 14:50:00 | 显示全部楼层 |阅读模式
mtk上动态分配内存的函数OslMalloc一次只能分配大小为512的空间吗?如果我要分配大于512的要怎么做,还是有其他函数可以调用.

请知道的高手们知道一下.谢谢
 楼主| 发表于 2007-1-20 14:50:00 | 显示全部楼层 |阅读模式
mtk上动态分配内存的函数OslMalloc一次只能分配大小为512的空间吗?如果我要分配大于512的要怎么做,还是有其他函数可以调用.

请知道的高手们知道一下.谢谢
发表于 2007-3-4 12:48:20 | 显示全部楼层
内存分配应该属于操作系统的一部分, 有字节和内存块两种内存分配方法, 你说的是一种块申请方法, 像OslMalloc很可是是根据你要的字节多少, 找到最适合的内存块给你使用. 如果没有, 就使用字节堆里给你分配一个内存块, 字节堆会产生内存碎片, 所以一般都很少使用其分配一些很小的内存块.
点评回复

使用道具 举报

发表于 2007-3-5 11:00:44 | 显示全部楼层
理论上他是不能动态分配的,要不然就可以跑sybinm了
点评回复

使用道具 举报

发表于 2007-3-13 13:31:02 | 显示全部楼层
#define RT_Memory_Pool_Size 100*1024
//开内存池
static NU_MEMORY_POOL  RTPool;

__align(4) const  unsigned char Memorypool[RT_Memory_Pool_Size];
//在内存池内动态分配内存

STATUS RT_Create_Memory_Pool()
{
         STATUS status;
          status = NU_Create_Memory_Pool(&RTPool,
                                                              "any name",
                                                              (VOID *)Memorypool,
                                                              RT_Memory_Pool_Size,
                                                              30,
                                                              NU_PRIORITY);
        return status;                 
}


//实现以下三个函数
//_malloc(nob)        
void* _malloc( unsigned  int  size )
{
     STATUS status;
     void *memory_ptr;
     status = NU_Allocate_Memory(&RTPool,
                                             &memory_ptr,
                                             size,
                                             NU_SUSPEND);
  

           switch(status)
                    {
                                case NU_SUCCESS:
                                      return   memory_ptr;                    
                                 case NU_INVALID_POOL:
                                                        
                                 case NU_NO_MEMORY:
                                 case NU_TIMEOUT:
                                        break;
                                                  
                    }       
   
}


// _free(frp)       
void _free (void* buff_pt)
{
         STATUS status;
        status=        NU_Deallocate_Memory(buff_pt);

        #if 0
         switch(status)
                    {
                                case NU_SUCCESS:
                                      return   1;                    
                                 case NU_INVALID_POINTER:
                                   default:                                 
                                        return 0;
                                                  
                    }       
         #endif
}
点评回复

使用道具 举报

发表于 2007-3-13 13:32:37 | 显示全部楼层
直接通过OS申请,好像有点问题.不知道为什么?
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-27 08:31 , Processed in 0.048407 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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