Выполняет ли выделение стека через _malloca, запускает ловушку выделения, установленную через _CrtSetAllocHook
Для приложения обработки аудиосигнала в реальном времени мы хотим убедиться, что никакое распределение памяти кучи не выполняется из потоков реального времени. В качестве внутреннего инструмента отладки, используемого во время разработки, мы настроили функцию перехвата распределения кучи через_CrtSetAllocHook
который проверяет идентификатор потока выделяющего потока и утверждает, является ли он потоком в реальном времени.
В некоторых частях нашей кодовой базы мы теперь используем _malloca
/ _freea
для временного создания буферов стека размером менее 400 байт. Согласно документации Microsoft,_malloca
выполняет выделение кучи вместо выделения стека, когда количество выделенных байтов больше, чем значение, определенное _ALLOCA_S_THRESHOLD
. _ALLOCA_S_THRESHOLD
в настоящее время установлено 1024.
Теперь мы сталкиваемся с утверждением о выделении кучи, когда _malloca
выделяет небольшие буферы стека ниже порогового значения, например, если не должно происходить выделения кучи. Я не нашел никакой информации, если хук распределения установлен через_CrtSetAllocHook
также срабатывает в случае _malloca
решает выполнить выделение стека, но у меня такое ощущение, что это может быть так.
Итак, первые вопросы: найдет ли кто-нибудь официальную документацию о ожидаемом здесь поведении? Второй вопрос: если ловушка выделения вызывается как для выделения стека, так и для выделения кучи, как я предполагаю, как нам затем выяснить, какой тип выделения был выполнен, чтобы запускать только утверждение для выделения выделения кучи?