I’ve been dabbling at a bit of C for some extremely optimized code, and it has served me well. I’ve also learnt some lessons. Here is one lesson I learnt regarding memset.
I had a large array of floats.
int great_array_size = 100000; float * the_great_array = (float*) malloc (sizeof(float) * great_array_size));
Now, I wanted a fast way of initializing the array to a specific value. So, without thinking too much I used memset. I did not have any knowledge when I was using this that it was mainly used to initialize strings.
float great_initial_value = 0.005f; memset(the_great_array, great_initial_value, great_array_size);
Instead of fast initialization what I got was a world of hurt. Memset will convert the passed value to a char value, and in this case use the least significant byte value of the float and use this value to initialize your array.
The correct way to initialize a float array is the obvious way.
for (size_t i = 0; i < great_array_size;++i) { the_great_array[i] = great_initial_value; }
Sigh. It seems easy now that I know what happens. Oh, well.
Why tjho
It will not work as expected.