前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Zephyr 内存分配

Zephyr 内存分配

原创
作者头像
无限之生
修改2020-07-01 17:45:23
1.6K0
修改2020-07-01 17:45:23
举报
文章被收录于专栏:技术日记技术日记

内存分配

内存片

概述

内存片(memory slab) 是一个内核对象

允许从指定的内存区域上动态地分配内存块

同一内存片上所有的内存块尺寸都是固定的

API

定义内存片

内存池

概述

内存池(memory pool)是一个内核对象

允许从指定的内存区域上动态地分配内存块(memory block)

内存池中的内存块的大小是不固定的

内存池使用"伙伴"(buddy)内存分配算法

API

定义内存池

struct k_mem_pool

内存池只能使用 K_MEM_POOL_DEFINE 在编译时进行定义和初始化。

分配内存块

int k_mem_pool_alloc(struct k_mem_pool *p, struct k_mem_block *block, size_t size, s32_t timeout)

释放内存块

void k_mem_pool_free(struct k_mem_block *block)

堆内存池

概述

堆内存池(heap memory pool) 是一个预定义的内存池对象

运行线程像malloc()一样去动态申请内存

堆内存池智能定义一个

堆内存池大小是可配置的,支持256、1024、4096和16384字节

内存块分配后,它的前16字节将被内核用于记录块描述符,

也就是说,申请N字节,实际至少使用N+16字节

配置项

CONFIG_HEAP_MEM_POOL_SIZE

指定内存池大小

默认是0字节,指示内核不要去定义堆内存池对象

API

分配

void *k_malloc(size_t size)

释放

void k_free(void *ptr)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 内存分配
    • 内存片
      • 概述
      • API
    • 内存池
      • 概述
      • API
    • 堆内存池
      • 概述
      • 配置项
      • API
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档