There could be any number of things going on.
First you need to see if the code is taking a long time to execute by itself, or if something on the system is starving it.
Fire up PerfMon. Get some solid graphs of CPU and Memory usage. Make them detailed. Look at total RAM, FS cache, Commit Charge, and RAM Used by your Program. Look at total CPU time, and CPU time in your specific process.
Don't just look at Task Manager, it can miss sudden spikes and nosedives.
Find an equivalent program in Linux, and compare the same things.
Have you done anything stupid like changing your Windows memory management settings (changing the pagefile, registry tweaks, etc)?
Make sure your Windows and Linux configurations are as close as possible (same background RAM and CPU usage, no Anti-virus software, no server services or other background tasks, etc).
Also, where are you getting your time numbers? Are they from the output of the code? If yes, don't put too much faith in them. You'd be amazed how inaccurate system timekeeping can be (especially in Windows). Use a stopwatch.
Another interesting thing to do is look at the disassembly of the two programs. Besdies obvious differences in system calls and statically linked libs, look at how the core algorithim is compiled.
It might be fun to try with a non-Microsoft compiler (Intel, OpenWatcom, gcc, etc).