---
title: 函数：malloc
description: "| 产品 | 是否支持 |"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/runtimeapi/aclpythondevg_01_0110.html
sourcePath: /source/zh/canncommercial/900/API/runtimeapi/aclpythondevg_01_0110.html
indexId: 60f2ee931944fc24896b2fe0220808b85ae138efa5cca7d9e9655ed9b5ca844071
---
# 函数：malloc

#### 产品支持情况

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


#### 功能说明

在Device上分配size大小的线性内存，并通过“dev_ptr”返回已分配内存的指针，且内存首地址64字节对齐。使用本接口申请的内存，需要通过acl.rt.free接口释放内存。

本接口分配的内存，会进行字节对齐，会对用户申请的size向上对齐成32字节整数倍后再多加32字节。但对于内存申请粒度为1G的大页内存，为节省大页内存，本接口会对用户申请的size仅向上对齐成32字节整数倍，不会再增加32字节。


#### 函数原型

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

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


#### 参数说明

| 参数名 | 说明 |
| --- | --- |
| size | int，申请内存的大小，单位Byte，size不能为0。 |
| policy | int，内存分配规则。 若配置的内存分配规则超出aclrtMemMallocPolicy取值范围，size≥2M时，按大页申请内存，否则按普通页申请内存。 |


#### 返回值说明

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


#### 约束说明

- 由于媒体数据处理功能对存放输入、输出数据的内存有更高的要求（例如，内存首地址128对齐），因此需调用专用的内存申请接口，如下。

  - 调用    媒体数据处理V1(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/dvpp/aclpythondevg_01_0219.html)
版本的接口对图片进行抠图、缩放等操作时，调用    acl.media.dvpp_malloc(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/dvpp/aclpythondevg_01_0223.html)
接口申请内存。
  - 调用    媒体数据处理V2(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/dvpp/aclpythondevg_01_0410.html)
版本的接口对图片进行抠图、缩放等操作时，调用    acl.himpi.dvpp_malloc(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/dvpp/aclpythondevg_01_0416.html)
接口申请内存。
- 本接口分配的内存不会进行对内容的初始化，建议在使用内存前先调用  acl.rt.memset
接口先初始化内存，清除内存中的随机数。
- 本接口内部不会进行隐式的Device同步或流同步。如果申请内存成功或申请内存失败会立刻返回结果。
- 使用  acl.rt.malloc
接口申请的内存，需要通过  acl.rt.free
接口释放内存。
- 频繁调用  acl.rt.malloc
接口申请内存、调用  acl.rt.free
接口释放内存，会损耗性能，建议用户提前做内存预先分配或二次管理，避免频繁申请/释放内存。
- 调用  acl.rt.malloc
接口申请内存时，会对用户输入的size按向上对齐成32字节整数倍后，再多加32字节。
  若用户使用本接口申请大块内存并自行划分、管理内存时，每段内存需同时满足以下需求：
  - 内存大小向上对齐成32整数倍加32字节（m = ALIGN_UP[len, 32] + 32字节）。
  - 内存起始地址需满足64字节对齐（ALIGN_UP[m, 64]）。
len表示某段内存的大小，ALIGN_UP[len, k]表示向上按k字节对齐：((len - 1) / k + 1) * k。
