memset(), memset_isr()

Updated: May 06, 2022

Set memory to a given value


#include <string.h>

void* memset( void* dst,
              int c,
              size_t length );

void* memset_isr( void* dst,
                  int c,
                  size_t length );


A pointer to the memory that you want to set.
The value that you want to store in each byte.
The number of bytes to set.



Use the -l c option to qcc to link against this library. This library is usually included automatically.


The memset() function fills length bytes starting at dst with the value c. The memset_isr() function is similar, but it's safe for you to use it in an interrupt service routine.

Note: The compiler might optimize out calls to memset if it appears that the memory isn't used again in the calling function. For a secure routine that forces the memory to be set, call memset_s().


A pointer to the destination buffer (that is, the value of dst).


#include <string.h>
#include <stdlib.h>
#include <stdio.h>

int main( void )
    char buffer[80];

    memset( buffer, '=', 80 );
    buffer[79] = '\0';
    puts( buffer );
    return EXIT_SUCCESS;

Environment variables:

On certain targets, you can use this environment variable to select the implementation of memset(). It doesn't affect the implementation of memset_isr(). The value is one of the strings given below.
  • for AArch64 targets:
    • aarch64_neon — optimized for AARCH64 targets using NEON
    • generic — the default
  • for ARMv7 targets:
    • cortex_a9 — optimized for the ARM Cortex-A9 processor; assumes that no unaligned access is supported
    • cortex_a9_aligned — optimized for ARM Cortex-A9; requires that unaligned memory access be enabled on the platform. If memory access is misaligned, this implementation falls back to the NEON version.
    • cortex_a9_neon — optimized for ARM Cortex-A9 using NEON
    • generic — the default
    • krait — optimized for the Qualcomm Krait CPU
    • krait_neon — optimized for Qualcomm Krait using NEON

Processes that register ISRs shouldn't use the NEON versions.


memset() is ANSI, POSIX 1003.1; memset_isr() is QNX Neutrino.

Table 1. memset()
Cancellation point No
Interrupt handler Read the Caveats
Signal handler Yes
Thread Yes
Table 2. memset_isr()
Cancellation point No
Interrupt handler Yes
Signal handler Yes
Thread Yes


Implementations of memset() that are optimized using SIMD instructions aren't safe to use in an interrupt handler. These include the NEON implementations on ARMv7 and AArch64.