鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

kupl_hbw_verify

判断内存空间从地址addr开始到addr+size为止是否全部在OPM内。

接口定义

int kupl_hbw_verify(void *addr, size_t size, int flags);

参数

表1 参数定义

参数名

类型

描述

输入/输出

addr

void*

需要判断的内存的起始地址

输入

size

size_t

需要判断的内存大小

输入

flags

int

额外的flag信息,可能会影响函数行为,当前可以设置为KUPL_HBW_TOUCH_PAGES或为0(0代表不做额外处理)

输入

KUPL_HBW_TOUCH_PAGES:表示在验证前会按照操作系统的分页,依次读写所需验证内存空间中的每一页。这项操作会强制操作系统为验证的地址实际分配内存空间并建立页的映射。在用户不能确定所需验证的虚拟内存是否已存在物理页的映射时需要指定该flags。

返回值

  • 若整块内存都在OPM中,返回KUPL_IS_HBW_MEMORY。
  • 若给定的内存空间中有不属于OPM的部分则返回KUPL_IS_NOT_HBW_MEMORY。
  • 若处理过程中出错返回KUPL_HBW_VERIFY_ERROR。

示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#include <stdio.h> 
#include <stdlib.h>
#include <assert.h>
#include "kupl.h" 

int main() 
{ 
    int len = 1024; 
    char *data = (char *)kupl_hbw_malloc(len);
    if (data == nullptr) {
        return 0;
    }

    int ret = kupl_hbw_verify(data, 1024, KUPL_HBW_TOUCH_PAGES);
    assert(ret ==  KUPL_IS_HBW_MEMORY);
    kupl_hbw_free(data);
    return 0; 
}
  • 上述示例演示了申请OPM内存并验证申请的内存是否全部在OPM上的流程。
  • 上述kupl_hbw_verify验证的指针的起始地址为kupl_hbw_malloc申请得到的地址的起始地址,验证的大小也与申请大小保持一致。
  • 在设置了HBW_TOUCH_PAGES后,kupl_hbw_verify在验证前会按照操作系统的分页,依次读写所需验证内存空间中的每一页。