From 8457a55e2238972368bedabded39da823f236775 Mon Sep 17 00:00:00 2001 From: Liewe Gutter Date: Mon, 9 Mar 2020 16:26:42 +0100 Subject: [PATCH] made memset significantly faster for very long strings. Memory will now be set in chunks of the size of an unsigned long long, until there are less characters left than the chunk size. --- src/ft_memset.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/ft_memset.c b/src/ft_memset.c index 83617b4..7308712 100644 --- a/src/ft_memset.c +++ b/src/ft_memset.c @@ -14,9 +14,25 @@ void *ft_memset(void *b, int c, size_t len) { - size_t i; + size_t i; + size_t chunk_size; + unsigned long long chunk; + chunk = 0; + chunk_size = sizeof(unsigned long long); + i = chunk_size / sizeof(unsigned char); + while (i > 0) + { + chunk <<= 8; + chunk |= (unsigned long long)(unsigned char)c; + i--; + } i = 0; + while (len >= chunk_size && i < (len - chunk_size)) + { + *(unsigned long long *)&(((unsigned char *)b)[i]) = chunk; + i += chunk_size; + } while (i < len) { ((unsigned char *)b)[i] = (unsigned char)c;