> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# XMemFree

> XMemFree é o retorno de chamada de desalocação de memória definido pelo aplicativo no XBOX GDK, usado em conjunto com XMemAlloc para substituir o desalocador de memória padrão do título.

# XMemFree

Função de retorno de chamada de desalocação de memória definida pelo aplicativo que substitui o desalocador de memória padrão.

## Sintaxe

```cpp theme={null}
VOID XMemFree(  
         PVOID Address,  
         ULONGLONG Attributes  
)  
```

### Parâmetros

*Address*   \_In\_<br />Tipo: PVOID

Endereço da memória a ser liberada.

*Attributes*   \_In\_<br />Tipo: ULONGLONG

Atributos da alocação. Consulte [XALLOC\_ATTRIBUTES](/pt-BR/reference/system/xmem/structs/xalloc_attributes) para obter detalhes.

### Valor retornado

Tipo: VOID

## Comentários

Para obter informações sobre a sintaxe das rotinas de alocação de memória, confira [XMEMALLOC\_ROUTINE](/pt-BR/reference/system/xmem/functions/xmemalloc_routine).

<Note>
  O código-fonte da implementação padrão de **XMemAlloc** e **XMemFree** é instalado como parte do Microsoft Game Development Kit (GDK). Confira `\GXDK\gameKit\Source\amd64\heap.c`.
</Note>

<Note>
  Se você implementar sua própria função **XMemFree**, é extremamente importante não fazer uma chamada ao driver do Direct3D 12 a partir dela. Isso ocorre porque a operação normal do driver pode levar à invocação de **XMemFree** sem proteção contra recursão. O requisito se estende a não executar operações finais de Release em objetos do Direct3D 12, pois isso pode levar a chamadas implícitas ao driver.
</Note>

É importante que o valor do parâmetro *Attributes* corresponda ao que foi passado na chamada original para [XMemAlloc](/pt-BR/reference/system/xmem/functions/xmemalloc). Se esse valor é armazenado em cache pelo seu código ou sintetizado conforme necessário fica a critério da sua implementação.

Considere um cenário em que seu alocador subjacente aloca blocos contíguos de 16 bytes alinhados em um limite de 16 bytes, mas você solicita um bloco de 128 bytes alinhado a 64 bytes, semelhante, na verdade, ao heap do CRT se o alocador de objetos pequenos estiver desativado.

Para atender a essa solicitação, o alocador pode, na verdade, alocar mais de 128 bytes para poder alinhar o endereço para você. Ao fazer isso, ele pode armazenar o comprimento do bloco e o endereço inicial real do bloco não alinhado no bloco de 16 bytes antes do endereço que ele retorna a você. A única maneira de determinar corretamente se esse foi o caso é ter as informações completas do parâmetro *Attributes* para identificar qual alocador foi usado e seguir corretamente a cadeia de volta até o início real do bloco alocado.

Não fazer *Attributes* corresponder pode levar a corrupção, vazamentos de memória ou outro comportamento incorreto.

## Requisitos

**Cabeçalho:** xmem.h

**Biblioteca:** xmem.lib

**Plataformas com suporte:** consoles da família XBOX One e consoles XBOX Series

## Confira também

[Referência de XMem](/pt-BR/reference/system/xmem/xmem_members)<br />[XMEMALLOC\_ROUTINE](/pt-BR/reference/system/xmem/functions/xmemalloc_routine)<br />[XALLOC\_ATTRIBUTES](/pt-BR/reference/system/xmem/structs/xalloc_attributes)<br />[XMemAlloc](/pt-BR/reference/system/xmem/functions/xmemalloc)<br />[XMemFreeDefault](/pt-BR/reference/system/xmem/functions/xmemfreedefault)


## Related topics

- [XMEMFREE_ROUTINE callback](/reference/system/xmem/functions/xmemfree_routine.md)
- [XMEM_ALLOCATION_HOOKS](/reference/system/xmem/structs/xmem_allocation_hooks.md)
- [XMEMALLOC_ROUTINE callback](/reference/system/xmem/functions/xmemalloc_routine.md)
