Вызывает ли выделение стека через _malloca хук allo c, установленный через _CrtSetAllocHook - PullRequest
1 голос
/ 30 апреля 2020

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

В некоторых частях нашего кодовая база теперь мы используем _malloca / _freea для временного создания стековых буферов <400 байт. Согласно <a href="https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/malloca?view=vs-2019" rel="nofollow noreferrer"> документации Microsoft , _malloca выполняет выделение кучи вместо выделения стека, когда количество выделенных байтов больше значения, определенного _ALLOCA_S_THRESHOLD. _ALLOCA_S_THRESHOLD в настоящее время установлено на 1024.

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

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

...