Back to Zephyr

Common C library code

doc/develop/languages/c/common_libc.rst

4.4.02.1 KB
Original Source

.. _c_library_common:

Common C library code #####################

Zephyr provides some C library functions that are designed to be used in conjunction with multiple C libraries. These either provide functions not available in multiple C libraries or are designed to replace functionality in the C library with code better suited for use in the Zephyr environment

Time function


This provides an implementation of the standard C function, :c:func:time, relying on the Zephyr function, :c:func:sys_clock_gettime. This function can be enabled by selecting :kconfig:option:COMMON_LIBC_TIME.

Dynamic Memory Management


The common dynamic memory management implementation can be enabled by selecting the :kconfig:option:CONFIG_COMMON_LIBC_MALLOC in the application configuration file.

The common C library internally uses the :ref:kernel memory heap API <heap_v2> to manage the memory heap used by the standard dynamic memory management interface functions such as :c:func:malloc and :c:func:free.

The internal memory heap is normally located in the .bss section. When userspace is enabled, however, it is placed in a dedicated memory partition called z_malloc_partition, which can be accessed from the user mode threads. The size of the internal memory heap is specified by the :kconfig:option:CONFIG_COMMON_LIBC_MALLOC_ARENA_SIZE.

The default heap size for applications using the common C library is zero (no heap). For other C library users, if there is an MMU present, then the default heap is 16kB. Otherwise, the heap uses all available memory.

There are also separate controls to select :c:func:calloc (:kconfig:option:COMMON_LIBC_CALLOC) and :c:func:reallocarray (:kconfig:option:COMMON_LIBC_REALLOCARRAY). Both of these are enabled by default as that doesn't impact memory usage in applications not using them.

The standard dynamic memory management interface functions implemented by the common C library are thread safe and may be simultaneously called by multiple threads. These functions are implemented in :file:lib/libc/common/source/stdlib/malloc.c.