Index: third_party/tcmalloc/vendor/README_windows.txt |
diff --git a/third_party/tcmalloc/vendor/README_windows.txt b/third_party/tcmalloc/vendor/README_windows.txt |
index f117ee288248b8b75931c2f79d859a63b5a39c71..f74ee05d87385f15f9b6d7ee7fdd62214c7fbcf1 100644 |
--- a/third_party/tcmalloc/vendor/README_windows.txt |
+++ b/third_party/tcmalloc/vendor/README_windows.txt |
@@ -1,113 +1,118 @@ |
---- COMPILING |
- |
-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 VC++ 7.1 (Visual Studio 2003) or |
-later -- 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. |
- |
-I don't know very much about how to install DLLs on Windows, so you'll |
-have to figure out that part for yourself. If you choose to just |
-re-use the existing .sln, make sure you set the IncludeDir's |
-appropriately! Look at the properties for libtcmalloc_minimal.dll. |
- |
-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). |
- |
-An alternative to all the above is to statically link your application |
-with libc, and then replace its malloc with tcmalloc. This allows you |
-to just build and link your program normally; the tcmalloc support |
-comes in a post-processing step. This is more reliable than the above |
-technique (which depends on run-time patching, which is inherently |
-fragile), though more work to set up. For details, see |
- https://groups.google.com/group/google-perftools/browse_thread/thread/41cd3710af85e57b |
- |
- |
---- THE HEAP-PROFILER |
- |
-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. |
- |
- |
---- WIN64 |
- |
-The function-patcher has to disassemble code, and is very |
-x86-specific. However, the rest of perftools should work fine for |
-both x86 and x64. In particular, if you use the 'statically link with |
-libc, and replace its malloc with tcmalloc' approach, mentioned above, |
-it should be possible to use tcmalloc with 64-bit windows. |
- |
- |
---- ISSUES |
- |
-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: 6 April 2011 |
+--- COMPILING |
+ |
+This project has begun being ported to Windows. A working solution |
+file exists in this directory: |
+ gperftools.sln |
+ |
+You can load this solution file into VC++ 7.1 (Visual Studio 2003) or |
+later -- 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. |
+ |
+I don't know very much about how to install DLLs on Windows, so you'll |
+have to figure out that part for yourself. If you choose to just |
+re-use the existing .sln, make sure you set the IncludeDir's |
+appropriately! Look at the properties for libtcmalloc_minimal.dll. |
+ |
+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). |
+ |
+An alternative to all the above is to statically link your application |
+with libc, and then replace its malloc with tcmalloc. This allows you |
+to just build and link your program normally; the tcmalloc support |
+comes in a post-processing step. This is more reliable than the above |
+technique (which depends on run-time patching, which is inherently |
+fragile), though more work to set up. For details, see |
+ https://groups.google.com/group/google-perftools/browse_thread/thread/41cd3710af85e57b |
+ |
+ |
+--- THE HEAP-PROFILER |
+ |
+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. |
+ |
+ |
+--- WIN64 |
+ |
+The function-patcher has to disassemble code, and is very |
+x86-specific. However, the rest of perftools should work fine for |
+both x86 and x64. In particular, if you use the 'statically link with |
+libc, and replace its malloc with tcmalloc' approach, mentioned above, |
+it should be possible to use tcmalloc with 64-bit windows. |
+ |
+As of perftools 1.10, there is some support for disassembling x86_64 |
+instructions, for work with win64. This work is preliminary, but the |
+test file preamble_patcher_test.cc is provided to play around with |
+that a bit. preamble_patcher_test will not compile on win32. |
+ |
+ |
+--- ISSUES |
+ |
+NOTE FOR WIN2K USERS: According to reports |
+(http://code.google.com/p/gperftools/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 gperftools Google Code site: |
+ http://groups.google.com/group/google-perftools |
+ http://code.google.com/p/gperftools/issues/list |
+ |
+-- craig |
+ |
+Last modified: 2 February 2012 |