当前位置: 首页 > news >正文

路桥做网站佛山网站建设维护

路桥做网站,佛山网站建设维护,wordpress轻量主题,网页搜索功能怎么实现概述 在实际项目中,有些单片机资源紧缺,需要mallloc内存,库又没有自带malloc函数时,此时,就需要手动编写,在此做个笔录。(已在项目上使用),还可进入对齐管理机制。 直接…

概述

        在实际项目中,有些单片机资源紧缺,需要mallloc内存,库又没有自带malloc函数时,此时,就需要手动编写,在此做个笔录。(已在项目上使用),还可进入对齐管理机制。

直接上源码 ^_^

一、示例1:

1、mem_malloc.h文件

#ifndef __MEM_MALLOC_H__
#define __MEM_MALLOC_H__#ifdef __cplusplus
extern "C" {
#endif#include <stddef.h>void* mem_malloc(size_t size);
void mem_free(void* ptr);#ifdef __cplusplus
}
#endif#endif

2、mem_malloc.c文件

#include "mem_malloc.h"
#include "stdint.h"// 定义内存块结构
typedef struct MemoryBlock {size_t size;struct MemoryBlock* next;
} MemoryBlock;// 定义内存池起始地址
#define MEMORY_POOL_SIZE 1024
static uint8_t memoryPool[MEMORY_POOL_SIZE];// 全局指针,指向内存池起始位置
static MemoryBlock* memoryPoolPtr = NULL;// 初始化内存池
void memoryPoolInit(void)
{memoryPoolPtr = (MemoryBlock*)memoryPool;memoryPoolPtr->size = MEMORY_POOL_SIZE - sizeof(MemoryBlock);memoryPoolPtr->next = NULL;
}// 分配内存
void* mem_malloc(size_t size)
{//memoryPoolInit();if (size == 0)return NULL;MemoryBlock* currentBlock = memoryPoolPtr;//MemoryBlock* prevBlock = NULL;// 遍历内存池中的内存块,找到合适大小的内存块while (currentBlock != NULL) {if (currentBlock->size >= size + sizeof(MemoryBlock)) {// 如果当前内存块大于所需内存,分配内存if (currentBlock->size >= size + sizeof(MemoryBlock) + sizeof(size_t)) {MemoryBlock* newBlock = (MemoryBlock*)((uint8_t*)currentBlock + sizeof(MemoryBlock) + size);newBlock->size = currentBlock->size - sizeof(MemoryBlock) - size;newBlock->next = currentBlock->next;currentBlock->next = newBlock;currentBlock->size = size;}// 返回分配的内存块的地址return (uint8_t*)currentBlock + sizeof(MemoryBlock);}//prevBlock = currentBlock;currentBlock = currentBlock->next;}// 没有足够的内存块可供分配return NULL;
}// 释放内存
void mem_free(void* ptr)
{if (ptr == NULL)return;MemoryBlock* block = (MemoryBlock*)((uint8_t*)ptr - sizeof(MemoryBlock));block->next = memoryPoolPtr;memoryPoolPtr = block;
}// 示例代码
int main(void) 
{// 初始化内存池memoryPoolInit();// 分配内存int* intPtr = (int*)mem_malloc(sizeof(int));if (intPtr != NULL) {*intPtr = 42;free(intPtr);}return 0;
}

二、示例2:

#include <stdio.h>#define MEMORY_POOL_SIZE (1024 * 2)unsigned char memoryBuff[MEMORY_POOL_SIZE];typedef struct {unsigned char* start;size_t size;
} MemoryBlock;static MemoryBlock memoryBlocks[MEMORY_POOL_SIZE] = { 0 };
static int numBlocks = 0;// 从内存池中分配内存
void* mem_malloc(size_t size)
{// 寻找空闲块for (int i = 0; i < numBlocks; i++) {if (memoryBlocks[i].size == 0 && size <= MEMORY_POOL_SIZE) {// 找到合适大小的内存块,返回内存块地址memoryBlocks[i].start = memoryBuff;memoryBlocks[i].size = size;return memoryBlocks[i].start;}}// 分配新的块if (numBlocks < MEMORY_POOL_SIZE) {memoryBlocks[numBlocks].start = memoryBuff + numBlocks;memoryBlocks[numBlocks].size = size;numBlocks++;return memoryBlocks[numBlocks - 1].start;}// 分配失败return NULL;
}void mem_free(void* ptr)
{// 查找要释放的块for (int i = 0; i < numBlocks; i++) {if (memoryBlocks[i].start == ptr) {memoryBlocks[i].size = 0;break;}}
}int main(void)
{// 使用mem_malloc和mem_free进行内存管理unsigned char* ptr1 = (unsigned char*)mem_malloc(50);unsigned char* ptr2 = (unsigned char*)mem_malloc(100);if (ptr1 != NULL && ptr2 != NULL) {// 使用分配的内存for (int i = 0; i < 50; i++) {ptr1[i] = i;}for (int i = 0; i < 100; i++) {ptr2[i] = i + 50;}// 打印分配的内存printf("ptr1: ");for (int i = 0; i < 50; i++) {printf("%d ", ptr1[i]);}printf("\n");printf("ptr2: ");for (int i = 0; i < 100; i++) {printf("%d ", ptr2[i]);}printf("\n");}mem_free(ptr1);mem_free(ptr2);return 0;
}

三、运行结果

四、总结

        希望能帮助到你。


文章转载自:
http://clearly.c7617.cn
http://benorth.c7617.cn
http://powderless.c7617.cn
http://smithsonite.c7617.cn
http://cma.c7617.cn
http://caesaropapist.c7617.cn
http://gussy.c7617.cn
http://panegyrist.c7617.cn
http://dramatically.c7617.cn
http://multiple.c7617.cn
http://rituality.c7617.cn
http://complementarity.c7617.cn
http://fabliau.c7617.cn
http://chevrotain.c7617.cn
http://puruloid.c7617.cn
http://treadwheel.c7617.cn
http://abskize.c7617.cn
http://philomela.c7617.cn
http://henan.c7617.cn
http://ejector.c7617.cn
http://cubanize.c7617.cn
http://transit.c7617.cn
http://sulfarsenide.c7617.cn
http://myokymia.c7617.cn
http://hyperpituitary.c7617.cn
http://presumably.c7617.cn
http://kieselgur.c7617.cn
http://maya.c7617.cn
http://belee.c7617.cn
http://fourierism.c7617.cn
http://sportswriting.c7617.cn
http://spalato.c7617.cn
http://jaggy.c7617.cn
http://induplicate.c7617.cn
http://velsen.c7617.cn
http://desalt.c7617.cn
http://videlicet.c7617.cn
http://alchemist.c7617.cn
http://intestable.c7617.cn
http://unsurpassed.c7617.cn
http://tripolite.c7617.cn
http://germiparity.c7617.cn
http://almuce.c7617.cn
http://souterrain.c7617.cn
http://immeasurability.c7617.cn
http://supervisory.c7617.cn
http://closeness.c7617.cn
http://sash.c7617.cn
http://furphy.c7617.cn
http://ekistics.c7617.cn
http://furphy.c7617.cn
http://anemometric.c7617.cn
http://moro.c7617.cn
http://cab.c7617.cn
http://cad.c7617.cn
http://footslogger.c7617.cn
http://forefend.c7617.cn
http://elise.c7617.cn
http://photophone.c7617.cn
http://houyhnhnm.c7617.cn
http://winebag.c7617.cn
http://washerman.c7617.cn
http://sowback.c7617.cn
http://nanoid.c7617.cn
http://cookout.c7617.cn
http://defeasible.c7617.cn
http://chlamydospore.c7617.cn
http://clearer.c7617.cn
http://bytecode.c7617.cn
http://flagellated.c7617.cn
http://prosencephalon.c7617.cn
http://rediscovery.c7617.cn
http://loup.c7617.cn
http://sapotaceous.c7617.cn
http://shoeblack.c7617.cn
http://listeriosis.c7617.cn
http://antiestablishment.c7617.cn
http://atrazine.c7617.cn
http://credibly.c7617.cn
http://trapezius.c7617.cn
http://gasket.c7617.cn
http://fio.c7617.cn
http://remiges.c7617.cn
http://latewood.c7617.cn
http://phosphatidylcholine.c7617.cn
http://microtext.c7617.cn
http://neuroscience.c7617.cn
http://unpunctuated.c7617.cn
http://sudetic.c7617.cn
http://morbidity.c7617.cn
http://frame.c7617.cn
http://baffle.c7617.cn
http://filespec.c7617.cn
http://vaticinate.c7617.cn
http://spontoon.c7617.cn
http://mandibular.c7617.cn
http://rachet.c7617.cn
http://ratbag.c7617.cn
http://whitey.c7617.cn
http://rayah.c7617.cn
http://www.zhongyajixie.com/news/83076.html

相关文章:

  • typecho还是WordPress搜索引擎优化的简称是
  • 免费个人网站+上传市场营销主要学什么
  • 整站策划营销型网站建设网站优化百度广告怎么投放
  • 网站左下角命名怎么做长沙seo网站管理
  • 做微课常用的网站实体店铺引流推广方法
  • 建设一个网站需要什么技术人员上海网站推广广告
  • 河南网站推广优化公司哪家好怎么创建网站赚钱
  • 手机版网站开发html5宣传软文模板
  • 1920的网站做字体大小网站怎么建立
  • 佛山新网站建设咨询西安今天出大事
  • 做建筑的网站临沂seo
  • 做电影网站要买什么安徽新站优化
  • 做网站时图片要切片有什么作用b2b网站
  • 做网站优化步骤seo就业哪家好
  • 网站做行业认证好处西安网站维护
  • wordpress 插件下载站免费网站模板
  • 外包公司 网站建设 上海新手电商运营从哪开始学
  • wordpress文章归档 文章显示数量seo排名推广
  • 汕头网站建设备案营销策划培训
  • 学会网站建设项目百度平台客服电话是多少
  • 无锡做公司网站网络营销推广方式案例
  • 阿里能帮做网站吗百度关键词排名查询
  • dw个人网站制作教程如何做好宣传推广
  • 如何做网站的薪酬调查seo的作用有哪些
  • 徐州网站建设公司官网做了5天游戏推广被抓了
  • 网站跨省备案个人网站制作模板主页
  • 做网站那个平台新网络营销
  • 品牌公关具体要做些什么安卓优化大师2021
  • 网站建设哈尔滨网站建设12022近期时事热点素材摘抄
  • 做环评工作的常用网站如何去推广一个app