Nothing you do in an exec node can affect the CPU used by node red. In particular the split node does not know what you are doing in the exec. The load is either in the process in the exec node, or it is a side effect of the delay.
Are you calling the exec node regularly? If so at what rate? Is it once per second possibly? If so then with the timeout greater than that you will be starting multiple copies in parallel, and the number will increase by 1 every second.
Confirmed my code can handle decimal in sleep() function because when I compile it and run it directly in the console without node-Red, it works like a charm. Even with 100ms.
I will provide you with the code later on today for you to have a look. Is that OK?
Possibly not what you want to consider right now but ... Have you considered whether this is the right approach? If you have a C++ app that needs to run continuously and output data, seems to me as though that should be written as a service and should either output to a stream (could just be stdout which could be redirected) or better still output to MQTT or even a REST API - depending on the size, shape and speed of output.
At the moment, you have two separate processes that you have tightly coupled which will always make debugging and performance tuning harder. Better to have them decoupled.
I only have a phone at the moment so can't try anything. If you add a debug node showing what is coming from the exec is there a difference between the ok sleep values and the bad values?
How often does it send a message in each case?
Normally the function is sleep(), lower case. I don't know the function you are calling. I do know the usual sleep takes an integer seconds, so if you give it a value less than 1 it will convert that to 0 and result in no delay in the loop.
As @Colin states, there is something a little odd about SLEEP. Also, there seems to be a file listed for inclusion, but it is not in the shared zip #include "../inc/compatibility.h" Maybe that is where SLEEP is defined?
My hunch, without having further data is that the SLEEP function is not throttling at all and the message are pumping out a high rate to the split node. You should add a message counter node after the exec node just to see what rate the messages are being delivered.