| OLD | NEW |
| 1 // Copyright (c) 2005, Google Inc. | 1 // Copyright (c) 2005, Google Inc. |
| 2 // All rights reserved. | 2 // All rights reserved. |
| 3 // | 3 // |
| 4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
| 5 // modification, are permitted provided that the following conditions are | 5 // modification, are permitted provided that the following conditions are |
| 6 // met: | 6 // met: |
| 7 // | 7 // |
| 8 // * Redistributions of source code must retain the above copyright | 8 // * Redistributions of source code must retain the above copyright |
| 9 // notice, this list of conditions and the following disclaimer. | 9 // notice, this list of conditions and the following disclaimer. |
| 10 // * Redistributions in binary form must reproduce the above | 10 // * Redistributions in binary form must reproduce the above |
| (...skipping 1773 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1784 // allocation size, which is known in the code above, but then is recalculated | 1784 // allocation size, which is known in the code above, but then is recalculated |
| 1785 // below. Another potential optimization would be careful manual inlining of | 1785 // below. Another potential optimization would be careful manual inlining of |
| 1786 // code, but I *think* that the compile will probably do this for me, and I've | 1786 // code, but I *think* that the compile will probably do this for me, and I've |
| 1787 // been careful to avoid aliasing issues that might make a compiler back-off. | 1787 // been careful to avoid aliasing issues that might make a compiler back-off. |
| 1788 | 1788 |
| 1789 // Evolution includes experimenting with different marks, to minimize the chance | 1789 // Evolution includes experimenting with different marks, to minimize the chance |
| 1790 // that a mark would be misunderstood (missed corruption). The marks are meant | 1790 // that a mark would be misunderstood (missed corruption). The marks are meant |
| 1791 // to be hashed encoding of the location, so that they can't be copied over a | 1791 // to be hashed encoding of the location, so that they can't be copied over a |
| 1792 // different region (by accident) without being detected (most of the time). | 1792 // different region (by accident) without being detected (most of the time). |
| 1793 | 1793 |
| 1794 // Uncomment the following define to turn on all the TCMalloc checking. | 1794 // Enable the following define to turn on all the TCMalloc checking. |
| 1795 // It will cost abotu 2% in performance, but it will catch double frees (most of | 1795 // It will cost about 2% in performance, but it will catch double frees (most of |
| 1796 // the time), and will often catch allocated-buffer overrun errors. This | 1796 // the time), and will often catch allocated-buffer overrun errors. This |
| 1797 // validation is only active when TCMalloc is used as the allocator. | 1797 // validation is only active when TCMalloc is used as the allocator. |
| 1798 // #define TCMALLOC_VALIDATION | 1798 #ifndef NDEBUG |
| 1799 #define TCMALLOC_VALIDATION |
| 1800 #endif |
| 1799 | 1801 |
| 1800 #if !defined(TCMALLOC_VALIDATION) | 1802 #if !defined(TCMALLOC_VALIDATION) |
| 1801 | 1803 |
| 1802 static size_t ExcludeSpaceForMark(size_t size) { return size; } | 1804 static size_t ExcludeSpaceForMark(size_t size) { return size; } |
| 1803 static void AddRoomForMark(size_t* size) {} | 1805 static void AddRoomForMark(size_t* size) {} |
| 1804 static void ExcludeMarkFromSize(size_t* new_size) {} | 1806 static void ExcludeMarkFromSize(size_t* new_size) {} |
| 1805 static void MarkAllocatedRegion(void* ptr) {} | 1807 static void MarkAllocatedRegion(void* ptr) {} |
| 1806 static void ValidateAllocatedRegion(void* ptr, size_t cl) {} | 1808 static void ValidateAllocatedRegion(void* ptr, size_t cl) {} |
| 1807 | 1809 |
| 1808 #else // TCMALLOC_VALIDATION | 1810 #else // TCMALLOC_VALIDATION |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1926 *mark = ~allocated_mark; // Distinctively not allocated. | 1928 *mark = ~allocated_mark; // Distinctively not allocated. |
| 1927 } | 1929 } |
| 1928 | 1930 |
| 1929 static void MarkAllocatedRegion(void* ptr) { | 1931 static void MarkAllocatedRegion(void* ptr) { |
| 1930 if (ptr == NULL) return; | 1932 if (ptr == NULL) return; |
| 1931 MarkType* mark = GetMarkLocation(ptr); | 1933 MarkType* mark = GetMarkLocation(ptr); |
| 1932 *mark = GetMarkValue(ptr, mark); | 1934 *mark = GetMarkValue(ptr, mark); |
| 1933 } | 1935 } |
| 1934 | 1936 |
| 1935 #endif // TCMALLOC_VALIDATION | 1937 #endif // TCMALLOC_VALIDATION |
| OLD | NEW |