visual-c++ - 通过 _malloca 的堆栈分配是否会触发通过 _CrtSetAllocHook 设置的分配挂钩
问题描述
对于实时音频信号处理应用程序,我们希望确保实时线程中不会执行堆内存分配。作为开发过程中使用的内部调试工具,我们设置了一个堆分配钩子函数,通过_CrtSetAllocHook
它检查分配线程的线程ID并断言它是否是实时线程。
在我们代码库的某些部分,我们现在使用_malloca
/_freea
来临时创建 < 400 字节的堆栈缓冲区。根据Microsoft 文档,_malloca
当分配的字节数大于定义的值时,执行堆分配而不是堆栈分配_ALLOCA_S_THRESHOLD
。_ALLOCA_S_THRESHOLD
当前设置为 1024。
我们现在在分配低于阈值的小堆栈缓冲区时遇到堆分配断言_malloca
,例如,如果不应该发生堆分配。_CrtSetAllocHook
如果在决定执行堆栈分配的情况下也触发了通过设置的分配挂钩,我没有找到任何信息_malloca
,但我觉得可能是这种情况。
所以第一个问题:有没有人找到任何关于这里可以预期的行为的官方文档?第二个问题:如果我假设的堆栈和堆分配都调用了 alloc 挂钩,那么我们应该如何确定执行哪种分配只触发堆分配的断言?
解决方案
推荐阅读
- ffmpeg - FFmpeg Auto Level、Auto Color 等类似于 YouTube 的 Auto-Fix
- bokeh - Holoviews 挖掘相关热图和回归图的流
- bash - 使用别名端口运行 docker 并访问 bash
- c# - 在特定时间段内创建具有日期时间的多个对象
- javascript - 表 td 颜色不变
- c - 如何为指针赋值
- flutter - 使用 webview_flutter 从本地文件渲染 HTML
- wordpress - 将 clickonce 应用程序部署到 wordpress 站点
- python - 如何在heapq中存储和排序字典?
- java - 为什么Java允许泛型数组声明?