I'm trying to find out if there is any way to get an idea of the CPU frequency of the system my C code is running on.
To clarify, I'm looking for an abstract solution (one that will not be tied to a specific architecture or operating system), which can give me an idea of the operating frequency of the computer that my code is executing on. I don't need to be exact, but I'd like to be in the ball park (i.e., I have a 2.2 GHz processor, and I'd like to be able to tell in my program that I'm within a few hundred MHz of that).
How can I use standard C code?
How you find the CPU frequency is both architecture and OS dependent, and there is no abstract solution.
If we were 20+ years ago and you were using an OS without any context switching and the CPU executed the instructions given it in order, you could write some C code in a loop and time it, and then, based on the assembly it was compiled into, compute the number of instructions at runtime. This is already making the assumption that each instruction takes 1 clock cycle, which is a rather poor assumption ever since pipelined processors.
But any modern OS will switch between multiple processes. Even then you can attempt to time a bunch of identical for
loop runs (ignoring time needed for page faults and multiple other reasons why your processor might stall) and get a median value.
And even if the previous solution works, you have multi-issue processors. With any modern processor, it's fair game to reorder your instructions, issue a bunch of them in the same clock cycle, or even split them across cores.