Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the equivalent of memset in C#?

I need to fill a byte[] with a single non-zero value. How can I do this in C# without looping through each byte in the array?

Update: The comments seem to have split this into two questions -

  1. Is there a Framework method to fill a byte[] that might be akin to memset
  2. What is the most efficient way to do it when we are dealing with a very large array?

I totally agree that using a simple loop works just fine, as Eric and others have pointed out. The point of the question was to see if I could learn something new about C# :) I think Juliet's method for a Parallel operation should be even faster than a simple loop.

Benchmarks: Thanks to Mikael Svenson: http://techmikael.blogspot.com/2009/12/filling-array-with-default-value.html

It turns out the simple for loop is the way to go unless you want to use unsafe code.

Apologies for not being clearer in my original post. Eric and Mark are both correct in their comments; need to have more focused questions for sure. Thanks for everyone's suggestions and responses.

like image 492
Jedidja Avatar asked Dec 13 '09 19:12

Jedidja


People also ask

What can I use instead of memset?

There isn't a standard function for this - you will just need to call memcpy() in a loop: my_stuff *my_array = malloc(MAX * sizeof(my_stuff)); my_stuff tmp; size_t i; tmp.

Is memset available in C?

C library function - memset() The C library function void *memset(void *str, int c, size_t n) copies the character c (an unsigned char) to the first n characters of the string pointed to, by the argument str.

Is memset same as malloc?

memset sets the bytes in a block of memory to a specific value. malloc allocates a block of memory.

What does memset mean in C?

Description. The memset() function sets the first count bytes of dest to the value c. The value of c is converted to an unsigned character.


1 Answers

You could use Enumerable.Repeat:

byte[] a = Enumerable.Repeat((byte)10, 100).ToArray(); 

The first parameter is the element you want repeated, and the second parameter is the number of times to repeat it.

This is OK for small arrays but you should use the looping method if you are dealing with very large arrays and performance is a concern.

like image 181
Mark Byers Avatar answered Oct 12 '22 18:10

Mark Byers