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

#### 产品支持情况

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


#### 功能说明

在Device上分配size大小的线性内存，并通过*devPtr返回已分配内存的指针。本接口分配的内存会进行字节对齐，会对用户申请的size向上对齐成32字节整数倍。使用本接口申请的内存，需要通过aclrtFree接口或aclrtFreeWithDevSync接口释放内存。

与aclrtMalloc接口相比，本接口只会对用户申请的size向上对齐成32字节整数倍，不会再多加32字节。


#### 函数原型

```
aclError aclrtMallocAlign32(void **devPtr, size_t size, aclrtMemMallocPolicy policy)
```


#### 参数说明

| 参数名 | 输入/输出 | 说明 |
| --- | --- | --- |
| devPtr | 输出 | “Device上已分配内存的指针”的指针。 |
| size | 输入 | 申请内存的大小，单位Byte。 size不能为0。 |
| policy | 输入 | 内存分配规则。类型定义请参见aclrtMemMallocPolicy。 若配置的内存分配规则超出aclrtMemMallocPolicy取值范围，size≥2M时，按大页申请内存，否则按普通页申请内存。 |


#### 返回值说明

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


#### 约束说明

- 本接口分配的内存不会进行对内容进行初始化。

- 本接口内部不会进行隐式的Device同步或流同步。如果申请内存成功或申请内存失败会立刻返回结果。
- 频繁调用aclrtMallocAlign32接口申请内存、调用  aclrtFree
接口释放内存，会损耗性能，建议用户提前做内存预先分配或二次管理，避免频繁申请/释放内存。
- 若用户使用本接口申请大块内存并自行划分、管理内存时，每段内存需同时满足以下需求，其中，len表示某段内存的大小，ALIGN_UP[len,k]表示向上按k字节对齐：((len-1)/k+1)*k：

  - 内存大小向上对齐成32整数倍+32字节（m=ALIGN_UP[len,32]+32字节）；
  - 内存起始地址需满足64字节对齐（ALIGN_UP[m,64]）。
