二叉樹準備V1 malloc

2021-10-01 05:01:53 字數 2935 閱讀 5497

前面的硬雜湊

我覺得非常棒!

神文 !

其實我的業務情況硬雜湊這樣很好的 這裡就是練筆!

我做乙個1k的記憶體儲存資料 也就是掉電儲存flash是1k 本地sram也是1k

我用malloc把乙個乙個的節點做出來 每次上電就可以flash->sram 這個樣子乙個樹 就出來了!

本文準備malloc部分

++++之前已經有了malloc模組 需要乙個池子+乙個管理表  我計畫按需分配 不要表了!就是池子!

++++我可以flash--池子完成對應 一上電全部讀出來 整個樹就好了 也可以愛護flash 只保持資料 每次上電我就建立樹

#include "gtreemalloc.h"	

#include "stdio.h" //printf

//記憶體池(32位元組對齊)

__align(32) u8 mem1base[mem1_max_size]__attribute__((at(0x10000800))); //sram記憶體池

//記憶體管理表

u16 mem1mapbase[mem1_alloc_table_size] __attribute__((at(0x10000800+mem1_max_size))); //sram記憶體池map

//記憶體管理引數//對接巨集定義

const u32 memtblsize = mem1_alloc_table_size; //記憶體表大小[1024/32]

const u32 memblksize = mem1_block_size; //記憶體分塊大小

const u32 memsize = mem1_max_size; //記憶體總大小

//記憶體管理控制器

struct _m_mallco_dev mallco_dev=

;void mymemcpy(void *des,void *src,u32 n)

void mymemset(void *s,u8 c,u32 count)

//記憶體管理初始化

void my_mem_init(void)

//獲取記憶體使用率

//返回值:使用率(0~100)

u8 my_mem_perused(void)

return (offset*memblksize);//返回偏移位址

} }

return 0xffffffff;//未找到符合分配條件的記憶體塊

} //釋放記憶體(內部呼叫)

//offset:記憶體位址偏移

//返回值:0,釋放成功;1,釋放失敗;

u8 my_mem_free(u32 offset)

return 0;

}else return 2;//偏移超區了.

} //釋放記憶體(外部呼叫)

//ptr:記憶體首位址

void myfree(void *ptr)

//分配記憶體(外部呼叫)

//size:記憶體大小(位元組)

//返回值:分配到的記憶體首位址.

void *mymalloc(u32 size)

u8 used=0;

u8 *p=0;

void malloctest(void)

#ifndef __gtreemalloc_h

#define __gtreemalloc_h

typedef unsigned char uint8_t;

typedef unsigned short uint16_t;

typedef unsigned int uint32_t;

typedef uint8_t u8;

typedef uint16_t u16;

typedef uint32_t u32;

#ifndef null

#define null 0

#endif

//mem1記憶體引數設定.mem1完全處於內部sram裡面.

#define mem1_block_size 32 //記憶體塊大小為32位元組

#define mem1_block_num 1 //約定分配多少k記憶體來做malloc功能

#define mem1_max_size mem1_block_num*1024 //最大管理記憶體 40k

#define mem1_alloc_table_size mem1_max_size/mem1_block_size //記憶體表大小

//記憶體管理控制器

struct _m_mallco_dev

;extern struct _m_mallco_dev mallco_dev; //在mallco.c裡面定義

void mymemset(void *s,u8 c,u32 count); //設定記憶體

void mymemcpy(void *des,void *src,u32 n);//複製記憶體

void my_mem_init(void); //記憶體管理初始化函式(外/內部呼叫)

u32 my_mem_malloc(u32 size); //記憶體分配(內部呼叫)

u8 my_mem_free(u32 offset); //記憶體釋放(內部呼叫)

u8 my_mem_perused(void); //獲得記憶體使用率(外/內部呼叫)

//使用者呼叫函式

void myfree(void *ptr); //記憶體釋放(外部呼叫)

void *mymalloc(u32 size); //記憶體分配(外部呼叫)

void malloctest(void);

#endif

二叉樹 二叉樹

題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...

樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹

目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...

二叉樹,完全二叉樹,滿二叉樹

二叉樹 是n n 0 個結點的有限集合,它或者是空樹 n 0 或者是由乙個根結點及兩顆互不相交的 分別稱為左子樹和右子樹的二叉樹所組成。滿二叉樹 一顆深度為k且有2 k 1個結點的二叉樹稱為滿二叉樹。說明 除葉子結點外的所有結點均有兩個子結點。所有葉子結點必須在同一層上。完全二叉樹 若設二叉樹的深度...