阅读Sofia-SIP源码 - su模块 - su_alloc.c/h

在众多资料和文章中多次注意到出现了home based memory management。这应该是Sofia软件包的亮点之一。现在总算开始分析它了。


struct su_home_s {
  int         suh_size;
  su_block_t *suh_blocks;
  su_alock_t *suh_lock;
};
typedef struct {
  unsigned sua_size:SIZEBITS;	/**< Size of the block */
  unsigned sua_home:1;		/**< Is this another home? */
  unsigned :0;
  void    *sua_data;		/**< Data pointer */
} su_alloc_t;

struct su_block_s {
  su_home_t  *sub_parent;	/**< Parent home */
  char       *sub_preload;	/**< Preload area */
  su_home_stat_t *sub_stats;	/**< Statistics.. */
  void      (*sub_destructor)(void *); /**< Destructor function */
  size_t      sub_ref;		/**< Reference count */
#define REF_MAX SIZE_MAX
  size_t      sub_used;		/**< Number of blocks allocated */
  size_t      sub_n;		/**< Size of hash table  */

  unsigned    sub_prsize:16;	/**< Preload size */
  unsigned    sub_prused:16;	/**< Used from preload */
  unsigned    sub_hauto:1;      /**< "Home" is not from malloc */
  unsigned    sub_auto:1;	/**< struct su_block_s is not from malloc */
  unsigned    sub_preauto:1;	/**< Preload is not from malloc */
  unsigned    sub_auto_all:1;	/**< Everything is from stack! */
  unsigned :0;

  su_alloc_t  sub_nodes[SUB_N];	/**< Pointers to data/lower blocks */
};

从结构体类型来看,整个Home based memory management包括三个层级。最上层是su_home_s,中间一层是su_block_s,最下那层是su_alloc_t。su_home_s结构体保留一个指向su_block_s结构体的指针,su_block_s包含一个su_alloc_t类型的数组。

SU_HOME_INIT宏定义就是给一个su_home_s结构体变量赋初值。

#define SU_HOME_INIT(obj) { 0, NULL, NULL }


su.c源文件中的前部包含了一大段有关如何使用home based memory managem

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用\[1\]和引用\[3\]的内容,你在编译sofia-sip时遇到了一个错误,错误信息是"configure: error: cannot find install-sh, install.sh, or shtool in "." "./.." "./../..""。这个错误通常是由于缺少必要的安装文件导致的。 为了解决这个问题,你可以尝试执行以下步骤: 1. 确保你已经安装了必要的依赖项。根据引用\[1\]中的内容,你可以使用命令"brew install"来安装缺少的依赖项。 2. 检查你的配置文件是否正确。根据引用\[1\]中的内容,你可以尝试使用"./configure"命令,并指定正确的路径和参数来配置sofia-sip。 3. 检查你的安装文件是否存在。根据错误信息,你需要确保"install-sh"、"install.sh"或"shtool"文件存在于当前目录或其父目录中。如果这些文件确实不存在,你可以尝试从其他来源获取它们,并将它们放置在正确的位置。 希望这些步骤能够帮助你解决问题。如果问题仍然存在,请提供更多的信息,以便我能够给出更具体的建议。 #### 引用[.reference_title] - *1* *2* *3* [MAC下build Janus](https://blog.csdn.net/dotphoenix/article/details/104789566)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值