This project has begun being ported to Windows. A working solution file exists in this directory: google-perftools.sln You can load this solution file into either VC++ 7.1 (Visual Studio 2003) or VC++ 8.0 (Visual Studio 2005) -- in the latter case, it will automatically convert the files to the latest format for you. When you build the solution, it will create a number of unittests, which you can run by hand (or, more easily, under the Visual Studio debugger) to make sure everything is working properly on your system. The binaries will end up in a directory called "debug" or "release" in the top-level directory (next to the .sln file). It will also create two binaries, nm-pdb and addr2line-pdb, which you should install in the same directory you install the 'pprof' perl script. Note that these systems are set to build in Debug mode by default. You may want to change them to Release mode. To use tcmalloc_minimal in your own projects, you should only need to build the dll and install it someplace, so you can link it into further binaries. To use the dll, you need to add the following to the linker line of your executable: "libtcmalloc_minimal.lib" /INCLUDE:"__tcmalloc" Here is how to accomplish this in Visual Studio 2005 (VC8): 1) Have your executable depend on the tcmalloc library by selecting "Project Dependencies..." from the "Project" menu. Your executable should depend on "libtcmalloc_minimal". 2) Have your executable depend on a tcmalloc symbol -- this is necessary so the linker doesn't "optimize out" the libtcmalloc dependency -- by right-clicking on your executable's project (in the solution explorer), selecting Properties from the pull-down menu, then selecting "Configuration Properties" -> "Linker" -> "Input". Then, in the "Force Symbol References" field, enter the text "__tcmalloc" (without the quotes). Be sure to do this for both debug and release modes! You can also link tcmalloc code in statically -- see the example project tcmalloc_minimal_unittest-static, which does this. For this to work, you'll need to add "/D PERFTOOLS_DLL_DECL=" to the compile line of every perftools .cc file. You do not need to depend on the tcmalloc symbol in this case (that is, you don't need to do either step 1 or step 2 from above). However, you will need to add a dependency to Psapi.lib, which tcmalloc uses. The heap-profiler has had a preliminary port to Windows. It has not been well tested, and probably does not work at all when Frame Pointer Optimization (FPO) is enabled -- that is, in release mode. The other features of perftools, such as the cpu-profiler and leak-checker, have not yet been ported to Windows at all. NOTE FOR WIN2K USERS: According to reports (http://code.google.com/p/google-perftools/issues/detail?id=127) the stack-tracing necessary for the heap-profiler does not work on Win2K. The best workaround is, if you are building on a Win2k system is to add "/D NO_TCMALLOC_SAMPLES=" to your build, to turn off the stack-tracing. You will not be able to use the heap-profiler if you do this. NOTE ON _MSIZE and _RECALLOC: The tcmalloc version of _msize returns the size of the region tcmalloc allocated for you -- which is at least as many bytes you asked for, but may be more. (btw, these *are* bytes you own, even if you didn't ask for all of them, so it's correct code to access all of them if you want.) Unfortunately, the Windows CRT _recalloc() routine assumes that _msize returns exactly as many bytes as were requested. As a result, _recalloc() may not zero out new bytes correctly. IT'S SAFEST NOT TO USE _RECALLOC WITH TCMALLOC. _recalloc() is a tricky routine to use in any case (it's not safe to use with realloc, for instance). I have little experience with Windows programming, so there may be better ways to set this up than I've done! If you run across any problems, please post to the google-perftools Google Group, or report them on the google-perftools Google Code site: http://groups.google.com/group/google-perftools http://code.google.com/p/google-perftools/issues/list -- craig Last modified: 18 November 2008