---
title: 函数：malloc_with_cfg
description: "| 产品 | 是否支持 |"
url: https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/latest/API/runtimeapi/aclpythondevg_01_1059.html
sourcePath: /source/zh/CANNCommunityEdition/920beta1/API/runtimeapi/aclpythondevg_01_1059.html
indexId: 2cecefca4e69a6025c4904166d38882e8f05fea263a7b13cf6e2b28b2c66784982
---
# 函数：malloc_with_cfg

#### 产品支持情况

| 产品 | 是否支持 |
| --- | --- |
| Ascend 950PR / Ascend 950DT | √ |
| Atlas A3 训练系列产品 / Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品 / Atlas A2 推理系列产品 | √ |
| Atlas 训练系列产品 | √ |
| Atlas 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | √ |


#### 功能说明

在Device上分配size大小的线性内存，并通过dev_ptr返回已分配内存的指针。

与acl.rt.malloc接口相比，本接口在申请内存时，还可以指定内存相关的配置信息。

使用本接口申请的内存，需要通过acl.rt.free接口释放内存。


#### 函数原型

- C函数原型
  1 aclError aclrtMallocWithCfg(void **devPtr, size_t size, aclrtMemMallocPolicy policy, aclrtMallocConfig *cfg)

- python函数
  1 dev_ptr, ret = acl.rt.malloc_with_cfg(size, policy, cfg)


#### 参数说明

| 参数名 | 说明 |
| --- | --- |
| size | int，申请内存的大小，单位Byte。size不能为0。 |
| policy | int，内存分配规则。 若配置的内存分配规则超出aclrtMemMallocPolicy取值范围，size≥2M时，按大页申请内存，否则按普通页申请内存。 |
| cfg | dict，内存配置信息。不指定配置时，此处可传空字典，具体请参见aclrtMallocConfig。 |


#### 返回值说明

| 返回值 | 说明 |
| --- | --- |
| devPtr | int，指向Device上已分配内存的指针地址。 |
| ret | int，错误码，返回0表示成功，返回其它值表示失败。 |


#### 约束说明

policy处支持配置单个枚举项，也支持配置多个枚举项位或。位或时，支持以下3组中枚举项组合，例如ACL_MEM_TYPE_HIGH_BAND_WIDTH | ACL_MEM_ACCESS_USER_SPACE_READONLY | ACL_MEM_MALLOC_HUGE_FIRST：

- 用于区分高、低带宽：ACL_MEM_TYPE_LOW_BAND_WIDTH、ACL_MEM_TYPE_HIGH_BAND_WIDTH
- 用于控制申请的内存在用户态为只读：ACL_MEM_ACCESS_USER_SPACE_READONLY
- 剩下其他基础内存分配规则：例如ACL_MEM_MALLOC_HUGE_FIRST、ACL_MEM_MALLOC_HUGE_ONLY、ACL_MEM_MALLOC_NORMAL_ONLY等
