GBASE 8s UDR内存管理_02_mi_dalloc

        函数mi_dalloc的作用是:在指定的内存持续时间内分配指定的内存量,并返回一个指向所分配块的指针。

1.语法

        void *mi_dalloc (size, duration)

        mi_integer size;

        MI_MEMORY_DURATION duration;

        size要分配的字节数。

        duration

指定要分配的用户内存的内存持续时间的值。持续时间的有效值如下:

含义

PER_ROUTINE

在UDR的一次迭代期间

PER_COMMAND

执行当前子查询的持续时间

PER_STATEMENT (Deprecated)

在当前SQL语句的持续时间内

PER_STMT_EXEC

在当前SQL语句的执行期间

PER_STMT_PREP

在当前准备的SQL语句的持续时间内

PER_TRANSACTION (Advanced)

在一次事务期间

PER_SESSION (Advanced)

在当前客户端会话期间

PER_SYSTEM (Advanced)

在数据库服务器执行期间

在客户端LIBMI应用程序中有效?

在用户定义的例程中有效?

是(但是,应用程序忽略内存持续时间)

2.用法

        mi_dalloc()函数为一个DataBlade API模块分配大小字节数的共享内存。mi_dalloc()函数是一个用于用户内存的构造函数。这个函数的行为与mi_alloc()完全相同,只是mi_dalloc()允许您在分配时显式地指定内存持续时间。

服务器

对于C UDR中的大多数内存分配,duration参数必须是以下公共内存持续时间常数之一:

 PER_ROUTINE(或PER_FUNCTION)

指定PER_ROUTINE,数据库服务器将在UDR返回时释放分配的内存。

 PER_COMMAND

指定PER_COMMAND,数据库服务器将在子查询执行完成时释放内存。

 PER_STMT_EXEC

指定PER_STMT_EXEC,数据库服务器将在SQL语句执行完成时释放内存。

 PER_STMT_PREP

指定PER_STMT_PREP,数据库服务器将在准备好的SQL语句终止时释放内存。

        提示:只有在常规内存持续时间不能安全执行需要完成的任务时,才在C UDR中使用高级内存持续时间。这些高级内存持续时间很长,会增加内存泄漏的可能性。

        在C UDR中,当引发异常时,数据库服务器自动释放通过mi_dalloc()分配的内存。

        重点:在C UDR中,使用DataBlade API内存管理函数来分配内存。使用DataBlade API内存管理函数可以确保数据库服务器能够自动释放内存,特别是在出现返回值或异常的情况下,例程无法释放内存。

        当不再需要mi_dalloc()分配的内存时,UDR可以使用mi_free()显式地释放mi_dalloc()分配的内存。

客户端

        在客户端LIBMI应用程序中,mi_dalloc()的工作原理与malloc()完全相同:

        存储分配在客户机进程的堆上。但是,数据库服务器不会自动释放此内存。因此,客户端LIBMI应用程序必须使用mi_free()函数显式地释放mi_dalloc()进行的所有分配。客户机LIBMI应用程序忽略内存持续时间。

        在回调函数中,调用mi_dalloc()请求PER_COMMAND的持续时间将返回NULL。因此,回调函数必须调用mi_dalloc(),其持续时间为PER_ROUTINE

        mi_dalloc()函数返回一个指向新分配内存的指针。转换此指针以匹配您分配的用户定义缓冲区或结构的结构。

3.返回

        指向新分配内存的指针。强制转换此指针以匹配为其分配内存的用户定义缓冲区或结构。

NULL函数无法分配内存。

        mi_dalloc()函数在遇到运行时错误时不会抛出MI_Exception事件。因此,该函数不会导致调用回调。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

八珍豆腐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值