redis内存分配是怎样的
发表于:2024-09-30 作者:千家信息网编辑
千家信息网最后更新 2024年09月30日,本篇内容介绍了"redis内存分配是怎样的"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!redis内
千家信息网最后更新 2024年09月30日redis内存分配是怎样的
本篇内容介绍了"redis内存分配是怎样的"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
redis内存管理是对malloc系列函数做了封装。额外记录了申请的内存大小信息。
#include
#include
static size_t used_memory = 0;
/*
分配sizeof(size_t)+size大小的内存,前面sizeof(size_t)个字节记录本次分配的大小,
记录分配的总内存大小,返回用于存储数据的内存首地址,即跨过sizeof(size_t)大小个字节
*/
void *zmalloc(size_t size) {
void *ptr = malloc(size+sizeof(size_t));
if (!ptr) return NULL;
*((size_t*)ptr) = size;
used_memory += size+sizeof(size_t);
return (char*)ptr+sizeof(size_t);
}
// 重新分配内存,ptr是旧数据的内存首地址,size是本次需要分片的内存大小
void *zrealloc(void *ptr, size_t size) {
void *realptr;
size_t oldsize;
void *newptr;
// ptr为空即没有旧数据,新申请一块内存即可,不涉及数据迁移
if (ptr == NULL) return zmalloc(size);
// 旧数据占据的内存大小
realptr = (char*)ptr-sizeof(size_t);
// 得到数据部分的内存大小
oldsize = *((size_t*)realptr);
// 以旧数据的内存地址为基地址,重新分配size+sizeof(size_t)大小的内存
newptr = realloc(realptr,size+sizeof(size_t));
if (!newptr) return NULL;
// 记录数据部分的内存大小
*((size_t*)newptr) = size;
// 重新计算已分配内存的总大小,sizeof(size_t)这块内存仍然在使用,不需要计算
used_memory -= oldsize;
used_memory += size;
// 返回存储数据的内存首地址
return (char*)newptr+sizeof(size_t);
}
void zfree(void *ptr) {
void *realptr;
size_t oldsize;
if (ptr == NULL) return;
// 算出真正的内存首地址
realptr = (char*)ptr-sizeof(size_t);
oldsize = *((size_t*)realptr);
// 减去释放的内存大小
used_memory -= oldsize+sizeof(size_t);
free(realptr);
}
// 复制字符串
char *zstrdup(const char *s) {
size_t l = strlen(s)+1;
char *p = zmalloc(l);
memcpy(p,s,l);
return p;
}
size_t zmalloc_used_memory(void) {
return used_memory;
}
"redis内存分配是怎样的"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
内存
大小
数据
分配
地址
内容
字节
更多
知识
部分
存储
实用
学有所成
接下来
信息
函数
困境
基地
基地址
字符
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器管理账户共享
河南萱冉互联网科技有限公司
陕西民主评议软件开发电话
数据库多表联查关系
计算机网络技术的期末试卷
中国移动网络服务器数据转移
水煮青蛙软件开发
可信赖的网络安全接入方案
泰拉瑞亚怎么去各大服务器
docker服务器修改系统时间
软件开发者国外收入 交税
海光4u服务器
华顶网络技术
高铁建设造价数据库
深圳的软件开发集中在哪
桌面数据库管理系统什么意思
济南三树软件开发有限公司
浪潮服务器的GPU怎么取出
网络安全手抄报 视频
query批量存储数据库
网络安全大赛模拟考试
人员密度分析管理服务器价格
常州汤姆软件开发
超聚变服务器售后电话
更改服务器的启动方式UEFI
计算机网络安全科技馆拍照
中国网络安全大赛英文怎么说
万兆网线直连服务器
纤原集团软件开发怎么样
绝地求生在哪里更新服务器