Как я могу найти информацию о распределении памяти Windows C++, который я использую?Как найти детали распределителя памяти Windows C++, который я использую?
Отладка мой C++ приложение показывает следующую информацию в стеке вызовов:
ntdll.dll!RtlEnterCriticalSection() - 0x4b75 bytes
ntdll.dll!RtlpAllocateHeap() - 0x2f860 bytes
ntdll.dll!RtlAllocateHeap() + 0x178 bytes
ntdll.dll!RtlpAllocateUserBlock() + 0x56c2 bytes
ntdll.dll!RtlpLowFragHeapAllocFromContext() - 0x2ec64 bytes
ntdll.dll!RtlAllocateHeap() + 0xe8 bytes
msvcr100.dll!malloc() + 0x5b bytes
msvcr100.dll!operator new() + 0x1f bytes
Мой многопоточный код масштабирования очень плохо, и profiling through random sampling указывает на то, что таНос в настоящее время является узким местом в моем многопоточном коде. Кажется, что стек указывает на некоторую блокировку при распределении памяти. Как я могу найти детали этой конкретной реализации malloc?
У меня есть read, что производительность системного распределителя Windows 7 в настоящее время конкурирует с распределителями, такими как tcmalloc и jemalloc. Я работаю на Windows 7, и я создаю Visual Studio 2010. Является ли msvcr100.dll быстрым/масштабируемым «системным распределителем Windows 7» часто упоминаемым как «Современное состояние»?
В Linux я видел резкое увеличение производительности в многопоточном коде путем изменения распределителя, но я никогда не экспериментировал с этим в Windows - спасибо.
* «Я подозреваю, что malloc в настоящее время является узким местом» * - почему? –
@RogerRowland: Я профилировал код с помощью случайной выборки и обнаружил, что malloc является узким местом. – JDiMatteo
Хорошо, но это узкое место, потому что оно «медленно» или потому, что вы слишком часто вызываете его? Я не удивлен тем, что вы показали - блокировки можно ожидать в многопоточной ситуации. –