PJM 软件数据结构方面组织的还是不错的;

typedef struct PjmsPktHeader {

int msgcode;                /*!< 銉°儍銈汇兗銈搞偝銉笺儔*/

int errcode;                /*!< 銈ㄣ儵銉笺偝銉笺儔*/

int16_t rscunit_id;         /*!< 銉︺儖銉冦儓ID*/

int16_t reserved[3];        /*!< 浜堢磩*/

struct timespec send_date;  /*!< 閫佷俊鏅傚埢*/

struct timespec recv_date;  /*!< 鍙椾俊鏅傚埢*/

ssize_t data_size;          /*!< 銉囥兗銈裤偟銈ゃ偤 */

uint64_t data[0];           /*!< 銉囥兗銈块牁鍩?*/

} PjmsPktHeader_t;

里面的data种类多了;

PjmsPktHeader_t *pktdata_p

PjmsReqJobStart_t *job_start_p = NULL;

job_start_p = (PjmsReqJobStart_t *)pktdata_p->data;

typedef struct PjmsReqJobStart {

RmSjid_t       subjobid;            /*!< 銈搞儳銉朓D*/

uint32_t       job_type;            /*!< 銈搞儳銉栥偪銈ゃ儣*/

int32_t        reserved;            /*!< 浜堢磩*/

PjmsVparam_t   vparam;              /*!< 灞炴€ф儏鍫?/

PjmsExecUnit_t execunit;            /*!< 瀹熻鍗樹綅鎯呭牨銇搞伄銈儠銈汇儍銉?/

int            num_fshare;          /*!< 銉曘偋銈偡銈с偄鎯呭牨鏁?*/

int32_t        num_gionode;         /*!< 浣跨敤銇欍倠GIO銉庛兗銉夋暟. 銈广儐銉笺偢銉炽偘銈搞儳銉栦互澶栥伅0*/

off_t          fshare_off;          /*!< 銉曘偋銈偡銈с偄鎯呭牨銇搞伄銈儠銈汇儍銉?*/

off_t          gionode_list_off;    /*!< GIO銉庛兗銉塈D銇儶銈广儓銇搞伄銈儠銈汇儍銉? 銈广儐銉笺偢銉炽偘銈搞儳銉栦互澶栥伅0*/

} PjmsReqJobStart_t;

这样的话,有几个好处:(注意:其中1的好处是靠FJ那边能实现个功能,即把结构体里的off_t变量指向的内存空间都释放了,只有这个功能实现了,才能谈得上正确的内存释放

1:释放内存操作很简便的,直接释放pktdata_p就行了,后面的PjmsReqJobStart_t 结构体以及它附带的一些结构体内存分配(靠off_t实现的)可以被跟随着就释放了,从而避免担心内存泄露问题;

2:统一的报头格式PjmsPktHeader_t

3:利用off_t 形式可以将紧跟着PjmsReqJobStart_t后面的内存分配空间跟PjmsReqJobStart_t中的off型变量连接在一块,通过该off型变量就可以直接引用到PjmsReqJobStart_t后面的内存分配空间中的东西

4:这种结构体后带有后缀内存分配区域形式可以使内存利用更加紧凑;

5:PJMD和PJSD的通信就是这些数据包的传递来进行的,而这些数据包利用完后,又可以及时的释放,从而回收了内存,利用数据包的传递来进行PJSD的工作,也可以避免在PJSD中的零散小内存泄露

内存泄露现象怎么避免,有时感觉是架构设计方面的问题;

比如在running_exec函数及其调用子函数中

是两个数据在流动的,target_p 和 PjmsPktHeader_t型数据

靠这两个数据的流动,来完成函数主要功能和避免内存泄露(因为释放内存只要考虑着这两个数据就行了)

内存泄露可以通过集中数据的通信流来避免,就是不要随意的calloc出独立(要calloc出和其他结构体相关联的内存空间)的内存空间,通过将内存分配集中到几个主要数据结构体,并靠着这几大数据结构体来完成PJSD的主要功能,通过这种形式来避免内存泄露现象发生

虽然黑体部分的现象发现的晚,但感觉靠着数据通信的相互作用来促使完成PJSD功能的办法,是能够避免内存泄露的。

 

PJM软件的内存泄露主要集中在off_t型的变量没办法释放这一块。

又看了一遍,感觉那个黑体部分是不会出现内存泄露问题,因为

Free的原型是这样的:

void free(void *ptr);

void *calloc(size_t nmemb, size_t size);

void *malloc(size_t size);

所以黑体部分的担心是多余的,所以PJM软件的这种数据结构组织还是不错的

上网查了查malloc函数的实现,搜到信息说如果用malloc分配的空间size这个值为2的整数倍的话,就会以后malloc的内存分配速度会大大加快,真的如此吗,还有待考证

PJM软件数据结构分析(怎样有效地避免内存泄露)相关推荐

  1. 硬盘扇区数据结构分析

    来自 http://hi.baidu.com/qtycr/blog/item/f6cc9b2b74e2d7fee7cd40da.html 硬盘扇区数据结构分析 初买来一块硬盘,我们是没有办法使用的,你 ...

  2. SICK LMS511开发及数据结构分析、坐标转换

    SICK LMS511开发及数据结构分析.坐标转换 最近公司有新上的项目,开始接触激光扫描仪,型号SICK LMS511. 获取数据 在网上看了一些资料,有通过SICK自带的软件看了一下激光扫描仪的配 ...

  3. 【Android 逆向】函数拦截 ( GOT 表数据结构分析 | 函数根据 GOT 表进行跳转的流程 )

    文章目录 一.GOT 表数据结构分析 二.函数根据 GOT 表进行跳转的流程 一.GOT 表数据结构分析 GOT 表分为 222 部分 , 一部分在 调用者部分 ( 可执行文件 ) 中 , 一部分在 ...

  4. ffplay的数据结构分析

    <ffplay分析(从启动到读取线程的操作)> <ffplay分析(视频解码线程的操作)> <ffplay分析(音频解码线程的操作)> <ffplay 分析( ...

  5. 管家婆服务器支持者打不开,管家婆软件数据问题使用技巧

    管家婆软件数据问题使用技巧 你知道哪些管家婆软件数据问题使用技巧呢?你对管家婆软件数据问题使用技巧了解吗?下面是yjbys小编为大家带来的管家婆软件数据问题使用技巧,欢迎阅读. 1.登录时提示&quo ...

  6. 音视频从入门到精通——FFmpeg数据结构分析

    FFmpeg数据结构分析 FFmpeg解码流程 重要结构体之间的关系 AVFormatContext iformat:输入媒体的AVInputFormat,比如指向AVInputFormat ff_f ...

  7. 数据结构分析:红黑树、B+树

    数据结构分析:红黑树.B+树 前言 常见的数据结构大概分为以下8种,作为一个开发人员,数据结构是内功之一. 本文参考了网络上相关知识,加之自己的理解.简单说明红黑树.B+树的特性. 1. 二叉搜索树( ...

  8. 数睿数据的四域模型(软件=数据+形式)源何引发强烈关注?

    9月9日,以"抢占五新生态"为主题的CDEC 2021中国数字智能生态大会暨第十四届中国软件渠道大会(深圳站)盛大召开,数睿数据应邀参加会议,并带来了"企业级无代码开发, ...

  9. MYSEE:Sp数据结构分析初稿

    以前写了MYSEE 服务器端源码分析文档,主要是对其中的消息机制(sp,cp,ts,之间的交互)的分析.因为CU抽风,发表的文章无故给我删除了 ,所以这个不是完整的 Sp 数据结构分析(初稿) 一:准 ...

最新文章

  1. SVM算法实现光学字符识别
  2. 9.5 程序示例--推荐系统-机器学习笔记-斯坦福吴恩达教授
  3. .net label在父容器中占两行显示_十分钟快速了解 JS 中的 offset、scroll、client
  4. 雅虎网站页面性能优化的34条黄金守则 收藏
  5. 小弟个人学习的过程!!!
  6. 第 72 章 FAQ
  7. jar k8s 自己的 部署_怎样部署K8S服务器
  8. C和C指针小记(五)-指针类型
  9. 11. 数值的整数次方
  10. Ubuntu 16.04显示分辨率的更改
  11. Rust : 闭包、move、复制与移动语义
  12. d3学习day3 --y轴添加文本标签
  13. 从开题报告到毕业论文|软件工具大公开
  14. 求解会议安排问题A - RJ501求解会议安排问题
  15. SSL证书申请流程,中文域名如何申请证书?
  16. ipv6解析地理位置
  17. 窗内网所有编程类视频大集合
  18. 得力标签打印机,驱动程序安装不上,手动安装好打印没反应
  19. mysql memos
  20. 软件设计原则:正确做小事

热门文章

  1. 传统关系型数据库和NoSQL数据库有何区别?
  2. 利用 Ophis 编写 Commodore 64 programs PRG 程序(二)
  3. 从事医院计算机网络管理工作,浅谈医院计算机网络安全管理工作.doc
  4. 【linux】rootfs根文件系统镜像制作
  5. 逛飙极兔牵手百世,快递行业三分江湖
  6. Vue-给后端传登陆的用户id
  7. Excel 2010 SQL应用104 域聚合函数之DMIN,DMAX
  8. Fisco Bcos区块链浏览器(WeBase)环境搭建
  9. SE51不能打开编辑屏幕窗口或SM59 EU_SCRP_WN32 测试失败
  10. DrawerLayout的导航图标详解