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

路桥做网站郴州seo外包

路桥做网站,郴州seo外包,新闻网站怎么做,无极网站建设定制概述 在实际项目中,有些单片机资源紧缺,需要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://www.zhongyajixie.com/news/11555.html

相关文章:

  • 网站建设策划书百度文库今日早间新闻
  • 国家重点项目建设部网站百度网页版进入
  • 网站设计的文案seo服务是什么
  • 成全视频免费观看在线看下载动漫东莞搜索优化十年乐云seo
  • 做网站的中文名字小红书软文案例
  • 局域网搭建的步骤14个seo小技巧
  • 哪种语言做网站好电商网站上信息资源的特点包括
  • ftp 迁移 网站头条搜索
  • 企业商务网免费seo公司
  • 阿里云建设个人网站班级优化大师下载安装
  • 做网站方法站长友情链接平台
  • 做网站花的钱和优化网站有关系吗北京seo管理
  • 创建全国文明城市我们在行动绘画东莞seo建站优化哪里好
  • 北京做网站个人seo建站是什么
  • ja.wordpress.org百度seo公司哪家好一点
  • 开锁换锁公司网站模板今日头条最新消息
  • asp网站后台无法编辑百度关键词优化软件网站
  • 湖南医院响应式网站建设企业seo值怎么提高
  • 微信网站开发详解贵阳网站建设制作
  • 做投资理财网站武汉seo排名
  • 做网站没有高清图片怎么办友情链接平台站长资源
  • 建设执业资格注册管理中心网站百度推广可以自己开户吗
  • 网站域名代办合肥百度搜索排名优化
  • 医院网站备案前置审批如何做网站网页
  • 兽装定制网站网站建设流程是什么
  • 嘉兴网站搜索排名如何进行搜索引擎的优化
  • 网站建设静态代码seo是如何做优化的
  • 怎么做交友网站杭州网站推广大全
  • 湖南网站制作电话谷歌关键词
  • 福建微网站建设价格百度竞价关键词优化