函数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事件。因此,该函数不会导致调用回调。

GBASE 8s UDR内存管理_02_mi_dalloc相关推荐

  1. GBASE 8s数据库参数管理

    1.参数文件管理 GBase 8s 数据库服务器的参数文件位于安装目录的etc子目录下,标准参数文件为onconfig.std.我们对onconfig参数文件的管理如下所述. onstat -c打印O ...

  2. GBase 8s 数据库操作指南

    一.数据库日常管理指南 简介: GBase 8s数据库日常管理包括数据库模式的切换,以及服务器的监控.监控主要分为两个方面,一方面是系统级别的监控,主要包括对系统cpu的监控,以及内存的占用情况:另一 ...

  3. GBase 8s(GDCA)课堂练习题及答案总结

    一.单选题 1.GBase 8s的数据库架构是(D)A.单进程.单线程架构B.多进程.单线程架构C.单进程.多线程架构D.多进程.多线程架构2.GBase 8s的停止数据库实例的命令是哪个?(C)A. ...

  4. oracle加密可以跟java一致吗,在GBase 8s上使用java udr实现Oracle兼容的加密解密功能...

    最近碰到客户从Oracle迁移到GBase 8s使用到字段加密解密功能,使用到了Utl_raw.cast_to_varchar2.Utl_raw.cast_to_raw.Utl_encode.base ...

  5. 南大通用GBase 8s集群权限管理介绍

    一.用户管理 用户可以使用CREATE USER语句创建一个新的GBase 8s MPP帐号. 下面我们通过两个示例,来向用户展示创建用户和更改用户密码的操作. 示例1:使用超级用户root登录,创建 ...

  6. GBase 8s 事务管理

    GBase 8s数据库的某些操作的集合可看作一个整体,在这些操作的执行过程中,不受其他操作的影响,这样的一个操作的集合就是事务. 事务(Transaction)是对数据库进行操作的集合.该集合是一个不 ...

  7. 南大通用GBase 8s数据空间管理

    南大通用GBase 8s数据库安装后,创建实例并初始化成功即可正常使用.如果是正式的生产环境,强烈建议对数据文件存储空间进行更为明细的划分,我们需要创建的数据空间一般包括如下几个:rootdbs.pl ...

  8. GBase 8s SQL 指南:语法————2.2 SQL 语句

    ALTER ROUTINE 语句 使用 ALTER ROUTINE  语句更改先前定义的用户定义的例程(UDR)的例程修饰符或路径名.该 语句是 SQL ANSI/ISO  标准的扩展. 语法 元素 ...

  9. GBase 8s 产品简介

    开发背景 南大通用安全数据库管理系统( 简称 GBase 8s), 是具有完全自主知识产权的数据库产品, 该产品符合 SQL92/99. ODBC. OLEDB. JDBC. ADO.NET 等国际 ...

  10. GBase 8s灾备集群HAC (一) 概述

    GBase 8s灾备集群HAC(High Availability Cluster)是被广泛使用的典型的高可用解决方 案.当主节点发生故障时可迅速切换至辅节点,企业的业务不受影响. 1. 同步方式:基 ...

最新文章

  1. ffmpeg连接超时与解码超时
  2. 160个Crackme028之对抗花指令
  3. mov eax,dword ptr fs:[0] 指令
  4. 分布式与人工智能课程(part10)--图像库的基本使用
  5. 机器学习入门系列(2)--机器学习概览(下)
  6. 《C和指针》——数组的奇怪形式
  7. python菜单栏添加子菜单_python添加菜单图文讲解
  8. python模拟超市抹零_Python基础练习二超市存包柜模拟
  9. 苹果6代掉水里怎么办 iPhone6掉水处理方法
  10. c mysql开发工具_Windows平台下Mysql C程序设计
  11. ExoPlayer在开启循环播放时的尴尬情况
  12. Ubuntu下ssh安装、配置及使用
  13. 接触Firefox的xpi
  14. 解决qt.qpa.plugin: Could not load the Qt platform plugin “xcb“问题
  15. flashfxp连接失败,flashfxp连接失败怎么办
  16. 交换机和路由器的区别_一文读懂交换机和路由器的区别
  17. CF1715D 2+ doors 题解
  18. 英特尔i5 1240H
  19. 解决 “VS2015 的warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失”的方法
  20. 如何应对数千微服务组件带来的挑战?

热门文章

  1. linux防挂马软件,Linux利用Python脚本检测网站挂马程序
  2. 【OpenGL基础】|| GLAD配置
  3. 全国哀悼日,英来网停站一天。
  4. 研究发现多种精神疾病和肠道微生物群的紊乱有关
  5. 什么是等保(信息安全等级保护)?
  6. JS校验银行卡号以及通过银行卡号自动带出所属银行信息
  7. Python字典的索引
  8. 一个bug看一天,写代码像cxk
  9. dategurd oracle_Oracle Data Guard
  10. php小写转大写,php怎么实现英文小写转大写