Выполняет ли выделение стека через _malloca, запускает ловушку выделения, установленную через _CrtSetAllocHook

Для приложения обработки аудиосигнала в реальном времени мы хотим убедиться, что никакое распределение памяти кучи не выполняется из потоков реального времени. В качестве внутреннего инструмента отладки, используемого во время разработки, мы настроили функцию перехвата распределения кучи через_CrtSetAllocHook который проверяет идентификатор потока выделяющего потока и утверждает, является ли он потоком в реальном времени.

В некоторых частях нашей кодовой базы мы теперь используем _malloca / _freeaдля временного создания буферов стека размером менее 400 байт. Согласно документации Microsoft,_malloca выполняет выделение кучи вместо выделения стека, когда количество выделенных байтов больше, чем значение, определенное _ALLOCA_S_THRESHOLD. _ALLOCA_S_THRESHOLD в настоящее время установлено 1024.

Теперь мы сталкиваемся с утверждением о выделении кучи, когда _mallocaвыделяет небольшие буферы стека ниже порогового значения, например, если не должно происходить выделения кучи. Я не нашел никакой информации, если хук распределения установлен через_CrtSetAllocHook также срабатывает в случае _malloca решает выполнить выделение стека, но у меня такое ощущение, что это может быть так.

Итак, первые вопросы: найдет ли кто-нибудь официальную документацию о ожидаемом здесь поведении? Второй вопрос: если ловушка выделения вызывается как для выделения стека, так и для выделения кучи, как я предполагаю, как нам затем выяснить, какой тип выделения был выполнен, чтобы запускать только утверждение для выделения выделения кучи?

0 ответов

Другие вопросы по тегам