Tcl\_Alloc(3) Tcl Library Procedures Tcl\_Alloc(3)

```

```

# [NAME](#NAME)

Tcl\_Alloc, Tcl\_Free, Tcl\_Realloc, Tcl\_AttemptAlloc, Tcl\_AttemptRealloc, Tcl\_GetMemoryInfo - allocate or free heap memory

# [SYNOPSIS](#SYNOPSIS)

```
#include <tcl.h>

void *
Tcl_Alloc(size)

Tcl_Free(ptr)

void *
Tcl_Realloc(ptr, size)

void *
Tcl_AttemptAlloc(size)

void *
Tcl_AttemptRealloc(ptr, size)

Tcl_GetMemoryInfo(dsPtr)
```

# [ARGUMENTS](#ARGUMENTS)

size\_t *size* (in)

Size in bytes of the memory block to allocate.

void *\*ptr* (in)

Pointer to memory block to free or realloc.

Tcl\_DString *\*dsPtr* (in)

Initialized DString pointer.

```
    
```

# [DESCRIPTION](#DESCRIPTION)

These procedures provide a platform and compiler independent interface for memory allocation. Programs that need to transfer ownership of memory blocks between Tcl and other modules should use these routines rather than the native **malloc()** and **free()** routines provided by the C run-time library.

**Tcl\_Alloc** returns a pointer to a block of at least *size* bytes suitably aligned for any use.

**Tcl\_Free** makes the space referred to by *ptr* available for further allocation.

**Tcl\_Realloc** changes the size of the block pointed to by *ptr* to *size* bytes and returns a pointer to the new block. The contents will be unchanged up to the lesser of the new and old sizes. The returned location may be different from *ptr*. If *ptr* is NULL, this is equivalent to calling **Tcl\_Alloc** with just the *size* argument.

**Tcl\_AttemptAlloc** and **Tcl\_AttemptRealloc** are identical in function to **Tcl\_Alloc** and **Tcl\_Realloc**, except that **Tcl\_AttemptAlloc** and **Tcl\_AttemptRealloc** will not cause the Tcl interpreter to **panic** if the memory allocation fails. If the allocation fails, these functions will return NULL. Note that on some platforms, but not all, attempting to allocate a zero-sized block of memory will also cause these functions to return NULL.

When a module or Tcl itself is compiled with **TCL\_MEM\_DEBUG** defined, the procedures **Tcl\_Alloc**, **Tcl\_Free**, **Tcl\_Realloc**, **Tcl\_AttemptAlloc**, and **Tcl\_AttempRealloc** are implemented as macros, redefined to be special debugging versions of these procedures.

**Tcl\_GetMemoryInfo** appends a list-of-lists of memory stats to the provided DString. This function cannot be used in stub-enabled extensions, and it is only available if Tcl is compiled with the threaded memory allocator When used in stub-enabled embedders, the stubs table must be first initialized using one of **Tcl\_InitSubsystems**, **Tcl\_SetPanicProc**, **Tcl\_FindExecutable** or **TclZipfs\_AppHook**.

# [KEYWORDS](#KEYWORDS)

alloc, allocation, free, malloc, memory, realloc, TCL\_MEM\_DEBUG

9.0 Tcl

---

Document: Tcl_GetMemoryInfo(3) from tcl 9.1.0-r0 (Chainguard OS)
Source: https://downloads.sourceforge.net/project/tcl/Tcl/9.1.0/tcl9.1.0-src.tar.gz
