Set memory to a given value
Synopsis:
#include <string.h>
void* memset( void* dst,
int c,
size_t length );
void* memset_isr( void* dst,
int c,
size_t length );
Arguments:
- dst
- A pointer to the memory that you want to set.
- c
- The value that you want to store in each byte.
- length
- The number of bytes to set.
Library:
libc
Use the -l c option to
qcc
to link against this library.
This library is usually included automatically.
Description:
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().
Returns:
A pointer to the destination buffer (that is, the value of dst).
Examples:
#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:
- LIBC_STRINGS
- 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.
Classification:
memset() is ANSI,
POSIX 1003.1;
memset_isr() is QNX Neutrino.
Table 1. memset()
Safety: |
|
Cancellation point |
No |
Interrupt handler |
Read the Caveats |
Signal handler |
Yes |
Thread |
Yes |
Table 2. memset_isr()
Safety: |
|
Cancellation point |
No |
Interrupt handler |
Yes |
Signal handler |
Yes |
Thread |
Yes |
Caveats:
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.