用户程序内存分配缓存简易实现

/*** memca.c* 应用程序内存缓存简易实现* * 用于尝试解决在内存分配偶现耗时问题* * memca 不要求额外内存用于此处管理* 正因为如此,所缓存内存单元最小为* 指针大小(sizeof(void *))*/
#include "memca.h"
#include <stdlib.h>#define MEMCA_MAX(a, b) ((a) > (b) ? (a) : (b))
#define MEMCA_MUTEX(m)  ({\(m) = (pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER;\
})void memca_init (struct memca_s *ma)
{uint16_t size = MEMCA_MAX(ma->size, sizeof(void *));uint32_t max  = ma->max;void *last = NULL;ma->head = ma->num = 0;MEMCA_MUTEX(ma->lock);ma->size = size;while (max--) {void *v = malloc(size);if (!v)return ;if (!last) {ma->head = last = v;} else {*(void **) last = v;last = v;}*(void **)v = NULL;ma->num += 1;}return ;
}void memca_close(struct memca_s *ma)
{void *v;while ((v=ma->head)) {ma->head = *(void **)v;ma->num -= 1;free(v);}return ;
}void * memca_alloc(struct memca_s *ma)
{void *v;pthread_mutex_lock(&ma->lock);if ((v=ma->head)) {ma->head = *(void **)v;ma->num -= 1;}pthread_mutex_unlock(&ma->lock);return v ?: malloc(ma->size);
}void memca_free(struct memca_s *ma, void *v)
{pthread_mutex_lock(&ma->lock);if (ma->num < ma->max) {*(void **)v = ma->head;ma->head = v;ma->num += 1;v = NULL;}pthread_mutex_unlock(&ma->lock);free(v);return ;
}
#ifndef MEMCA_H
#define MEMCA_H#include <inttypes.h>
#include <pthread.h>struct memca_s {const char *name;uint16_t size;pthread_mutex_t lock;uint32_t max;uint32_t num;void *head;
};void memca_init (struct memca_s *ma);
void memca_close(struct memca_s *ma);void * memca_alloc(struct memca_s *ma);
void   memca_free (struct memca_s *ma, void *v);
#endif

简单略有内涵。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/2027.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络套接字编程(三)(HTTP)

gitee仓库&#xff1a;https://gitee.com/WangZihao64/linux/tree/master/CalTcp 一、重谈协议 协议是一种“约定”&#xff0c;这种约定是双方都知道的。有了一致的约定&#xff0c;双方才能够正常地进行通信。协议在网络的第一篇博客中也提到过&#xff0c;协议是双方进行通…

[微信小程序] 项目引入vant组件库 npm构建问题 避坑

按照Vant Weapp官网的快速上手&#xff0c;构建npm时发现报错 问题&#xff1a;package.json 未找到 原因&#xff1a;没有初始化npm&#xff0c;所以没生成package.json&#xff0c;npm构建时需要此文件&#xff0c;所以报此错误 解决&#xff1a;在项目根目录里执行 “ npm i…

python opencv 级联Haar多目标检测

一、基于OpenCV的haar分类器实现笑脸检测 1、Haar分类器介绍 &#x1f680;Haar分类器是一种基于机器学习的目标检测算法&#xff0c;它使用Haar特征描述图像中的目标。Haar特征是基于图像亮度的局部差异计算得出的&#xff0c;可以用来描述目标的边缘、角落和线条等特征。 使用…

基于PyQt5的UI界面开发——信号与槽

信号与槽的机制 PyQt5采用了一种被称为“信号与槽”机制的编程模式&#xff0c;用于处理对象间的通信和事件处理。在PyQt5中&#xff0c;信号&#xff08;signal&#xff09;是对象发出的特定事件&#xff0c;例如按钮被点击、文本被修改等。而槽&#xff08;slot&#xff09;…

用Maven的exec插件执行Java程序

Maven的exec插件介绍 利用maven的exec插件可以执行系统和Java程序。 官网资源 exec插件官网&#xff1a;https://www.mojohaus.org/exec-maven-plugin/java-mojo.html Goals exec:exec表示在一个单独的进程内执行系统和Java程序。 exec:java表示在当前的Java虚拟机内执行J…

【Rust 基础篇】Rust 弱引用:解决引用循环与内存泄漏

导言 在 Rust 中&#xff0c;引用循环是一种常见的编程问题&#xff0c;会导致资源无法被正确释放&#xff0c;从而造成内存泄漏。为了解决引用循环的问题&#xff0c;Rust 提供了弱引用&#xff08;Weak Reference&#xff09;机制。本篇博客将详细介绍 Rust 弱引用的概念、用…

如何防止服务器被入侵

在网络环境下&#xff0c;网络被入侵和攻击&#xff0c;可谓是防不胜防&#xff0c;如入侵服务器窃取数据、勒索&#xff0c;这类事件屡见不鲜&#xff0c;让许多企业都很苦恼。总结经验教训&#xff0c;吃一堑长一智&#xff0c;网络病毒、黑客无时无处不在&#xff0c;我们要…

GPU/CPU友好的模乘算法:Multi-Precision Fast Modular Multiplication

1. 引言 前序博客&#xff1a; 基础算法优化——Fast Modular Multiplication 大整数的模乘&#xff1a; 是每种SNARK计算的核心是最昂贵的基石通常可决定整个协议的复杂度 对模乘运算的哪怕一点点改进&#xff0c;都可能带来大幅加速。 Ingonyama团队2023年论文 Multi-P…

Java的LocalDataTime与Date和mysql中的datatime和data的关系

LocalDataTime 与Data区别 LocalDatatime是Java8引入的新类型&#xff0c;属于Java8日期时间API&#xff0c;Data是旧版的日期API不可变性&#xff1a;LocalDataTime是不可变类&#xff0c;一旦创建后就不能修改&#xff0c;需要修改只能创建新的对象&#xff0c;Data是可变类…

Docker高级——网络配置

Docker网络 默认网络 安装 Docker 以后&#xff0c;会默认创建三种网络&#xff0c;可以通过 docker network ls 查看 [roottest ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 6f24f7cbfa10 bridge bridge local 2dc34a1c0f04 host host…

MobPush Android For Unity

本文档以unity2020.3.41演示 集成准备 注册账号 使用MobSDK之前&#xff0c;需要先在MobTech官网注册开发者账号&#xff0c;并获取MobTech提供的AppKey和AppSecret&#xff0c;详情可以点击查看注册流程 下载.unitypackage包 打开 Github 下载 MobPush-For-Unity 项目&am…

springboot上传文件到本地,并且返回一个http访问路径

直接上代码&#xff0c;controller层代码&#xff1a; RestController RequestMapping("/common") public class CommonController {private static final Logger log LoggerFactory.getLogger(CommonController.class);Resourceprivate ServerConfig serverConfig…

C++模拟实现vector

目录 1.代码实现 2.注意事项 1.成员变量 2. 不能使用memcpy函数拷贝数据 1.用string类型测试时&#xff0c;要考虑到vs可能把数据存储在数组buffer里面 3.insert函数中指针的失效性 1.加引用&#xff0c;那么就不能传常量&#xff0c;比如v.begin() 3 2.加引用&#x…

【ArcGIS Pro微课1000例】0028:绘制酒店分布热力图(POI数据)

本文讲解在ArcGIS Pro中文版中,基于长沙市酒店宾馆分布矢量点数据(POI数据)绘制酒店分布热力图。 文章目录 一、加载酒店分布数据二、绘制热度图参考阅读: 【GeoDa实用技巧100例】004:绘制长沙市宾馆热度图 【ArcGIS微课1000例】0070:制作宾馆酒店分布热度热力图 一、加载…

【机器学习】基于卷积神经网络 CNN 的猫狗分类问题

文章目录 一、卷积神经网络的介绍1.1 什么是卷积神经网络1.2 重要层的说明1.3 应用领域二、 软件、环境配置2.1 安装Anaconda2.2 环境准备 三、猫狗分类示例3.1 图像数据预处理3.2 基准模型3.3 数据增强3.4 dropout层四、总结 一、卷积神经网络的介绍 1.1 什么是卷积神经网络 …

el-table找出当前单元格与对应的上下列的值

当前单元格与对应的上下列的值如果不相同就设置个红色边框 当前单元格与对应的上下列的值如果不相同就设置个红色边框 当前单元格与对应的上下列的值如果不相同就设置个红色边框 以下是示例代码&#xff0c;对tableData数据的name字段进行处理 如果当前name值与上一条数据的na…

《Programming Abstractions In C》阅读笔记p69-p71

今日完成《Programming Abstractions In C》阅读P69-p71。 一、技术总结 涉及到的技术知识点有“symbolic constant”,”Array declaration”&#xff0c;“Array selection”。 #include <stdio.h> #define NJudges 5int main(int argc, char const *argv[]) {// Arra…

mybatis作用域和生命周期解读

目录 SqlSessionFactoryBuilder SqlSessionFactory SqlSession 依赖注入框架可以创建线程安全的、基于事务的 SqlSession 和映射器&#xff0c;并将它们直接注入到你的 bean 中&#xff0c;因此可以直接忽略它们的生命周期。 SqlSessionFactoryBuilder 这个类可以被实例化…

Scala集合 - List

水善利万物而不争&#xff0c;处众人之所恶&#xff0c;故几于道&#x1f4a6; 目录 一、不可变List 1. 创建List 2. 取指定的数据 3. 向List中添加元素 4. 遍历List 5. 集合间合并 - 扁平化处理 二、可变List 1. 创建可变集合对象 2. 添加元素 3. 修改元素 4. 删除元素 一、…

kafka生产端是TCP连接管理

目录 前言&#xff1a; Kafka生产者程序 Kafka生产者客户端如何创建TCP连接 Kafka生产者客户端如何关闭TCP连接 总结&#xff1a; 参考资料 前言&#xff1a; 在网络层协议中&#xff0c;TCP作用在第四层传输层、Http协议作用在第七层最上层应用层&#xff0c;一个完整的…