专栏首页技术日记Zephyr 内存分配
原创

Zephyr 内存分配

内存分配

内存片

概述

内存片(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)

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用vscode阅读C代码outline不显示问题

    1 问题:使用vscode code 阅读C代码 outline 显示No symbols found in document 'xxxx'

    无限之生
  • zephyr 开发环境的遇到一些问题

    官网描述参考: https://docs.zephyrproject.org/latest/guides/west/troubleshooting.html

    无限之生
  • openssl使用-- 之 AES算法库使用

    无限之生
  • 笔记66 | eclipse/android studio/ADB查看Android应用内存使用情况

    项勇
  • 剑指内存泄漏

    指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,失去了对该段内存的控制,因而造成了内存的...

    audy
  • C语言最大难点揭秘:编程的祸根!

    本文将带您了解一些良好的和内存相关的编码实践,以将内存错误保持在控制范围内。内存错误是 C 和 C++ 编程的祸根:它们很普遍,认识其严重性已有二十多年,但始终...

    公众号C语言与CPP编程
  • Devtools 老师傅养成[7] - Memory 内存

    google developers 官方文档: https://developers.google.com/web/tools/chrome-devtools/

    scarsu
  • iOS 性能优化实践:头条抖音如何实现 OOM 崩溃率下降50%+

    OOM 其实是Out Of Memory的简称,指的是在 iOS 设备上当前应用因为内存占用过高而被操作系统强制终止,在用户侧的感知就是 App 一瞬间的闪退,...

    ios-lan
  • Android内存管理(四)Linux的内存管理机制

    linux内存管理卷帙浩繁,本文只能层层递进地带你领略冰山轮廓,通过本文你将了解到以下内容:

    Anymarvel
  • 今咱们来聊聊JVM 堆外内存泄露的BUG是如何查找的前言内存泄露Bug现场查找线索总结

    美的让人心动

扫码关注云+社区

领取腾讯云代金券