---
title: aclrtReserveMemAddress
description: "| 产品 | 是否支持 |"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/runtimeapi/aclcppdevg_03_0114.html
sourcePath: /source/zh/canncommercial/900/API/runtimeapi/aclcppdevg_03_0114.html
indexId: 679a0bf0d238c4015c9e0baa314a6926a1b1d32485bc8378bfed47685cf718af68
---
# aclrtReserveMemAddress

#### 产品支持情况

| 产品 | 是否支持 |
| --- | --- |
| Atlas 350 加速卡 | √ |
| Atlas A3 训练系列产品 / Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品 / Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | √ |
| Atlas 推理系列产品 | √ |
| Atlas 训练系列产品 | √ |


#### 功能说明

预留虚拟内存。

本接口需与以下其它接口配合使用，以便申请地址连续的虚拟内存、最大化利用物理内存：1. 申请虚拟内存（  aclrtReserveMemAddress
接口）；
2. 申请物理内存（  aclrtMallocPhysical
接口）；
3. 将虚拟内存映射到物理内存（  aclrtMapMem
接口）；
4. 执行任务（调用具体的任务接口）；
5. 取消虚拟内存与物理内存的映射（  aclrtUnmapMem
接口）；
6. 释放物理内存（  aclrtFreePhysical
接口）；
7. 释放虚拟内存（  aclrtReleaseMemAddress
接口）。


#### 函数原型

```
aclError aclrtReserveMemAddress(void **virPtr, size_t size, size_t alignment, void *expectPtr, uint64_t flags)
```


#### 参数说明

| 参数名 | 输入/输出 | 说明 |
| --- | --- | --- |
| virPtr | 输出 | “已分配的虚拟内存地址的指针”的指针。 |
| size | 输入 | 虚拟内存大小，单位Byte。 size不能为0。 |
| alignment | 输入 | 虚拟地址对齐值，预留，当前只能设置为0。 |
| expectPtr | 输入 | 指定期望返回的虚拟内存起始地址。 取值说明如下： nullptr：系统自动分配符合对齐规则的虚拟地址。 对于Atlas 350 加速卡，当前仅支持配置为nullptr。 非nullptr：由用户指定起始地址，地址必须在8T范围内（16T\-24T）。用户需确保指定的地址未被占用，且符合对齐规则，否则预留虚拟内存失败，接口返回错误。对齐规则为：若size小于1G，expectPtr需按2的n次方对齐；如果size大于1G，expectPtr需按1G对齐。 须知：由用户指定起始地址是试验特性，后续版本可能存在变更，不支持应用于商用产品中。 |
| flags | 输入 | 大页/普通页标志，预留参数，建议固定配置为0。 |


#### 返回值说明

返回0表示成功，返回其他值表示失败，请参见aclError。


#### 约束说明

- Atlas 200I/500 A2 推理产品上，Ascend RC形态下，不支持调用本接口。

- 使用本接口预留的虚拟内存，单进程场景下只支持调用  aclrtMemcpyAsync
接口实现两个Device之间的数据拷贝。


#### 接口调用示例

接口调用示例，参见虚拟内存管理(https://www.hiascend.comdocument/detail/zh/canncommercial/900/programug/acldevg/runtime_doc_dev_0007.html)。
