Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual c++ 通过malloca进行堆栈分配是否会触发通过CrtSetAllocHook设置的alloc钩子_Visual C++_Msvcrt_Stack Allocation - Fatal编程技术网

Visual c++ 通过malloca进行堆栈分配是否会触发通过CrtSetAllocHook设置的alloc钩子

Visual c++ 通过malloca进行堆栈分配是否会触发通过CrtSetAllocHook设置的alloc钩子,visual-c++,msvcrt,stack-allocation,Visual C++,Msvcrt,Stack Allocation,对于实时音频信号处理应用程序,我们希望确保不从实时线程中执行堆内存分配。作为开发过程中使用的内部调试工具,我们通过\u CrtSetAllocHook设置了一个堆分配钩子函数,该函数检查分配线程的线程ID并断言它是否是实时线程 在代码库的某些部分,我们现在使用\u malloca/\u freea临时创建

对于实时音频信号处理应用程序,我们希望确保不从实时线程中执行堆内存分配。作为开发过程中使用的内部调试工具,我们通过
\u CrtSetAllocHook
设置了一个堆分配钩子函数,该函数检查分配线程的线程ID并断言它是否是实时线程

在代码库的某些部分,我们现在使用
\u malloca
/
\u freea
临时创建<400字节的堆栈缓冲区。根据\u malloca当分配的字节数大于
\u ALLOCA\u S\u阈值定义的值时,执行堆分配而不是堆栈分配<代码>\u ALLOCA\u S\u阈值当前设置为1024

现在,当
\u malloca
在阈值下分配小堆栈缓冲区时(例如,如果不应该进行堆分配),我们会运行heap allocation断言。如果在
\u malloca
决定执行堆栈分配时,通过
\u CrtSetAllocHook
设置的分配挂钩也被触发,我没有找到任何信息,但我感觉可能是这样的

第一个问题是:有没有人找到任何关于这种行为的官方文件?
第二个问题:如果像我假设的那样为堆栈和堆分配调用alloc钩子,那么我们应该如何确定执行了哪种分配以仅触发堆分配断言?

一个不明显的实现细节是,当crtdbg处于活动状态时,malloca()将永远不会从堆栈分配。典型的海森堡。哎哟,听起来像个解释。但你能说得更详细一点吗?“crtdbg处于活动状态”的确切含义是什么?这是一个编译时的东西,在包含crtdbg头时通过宏激活,还是一个运行时的东西,在设置alloc钩子时激活?您知道有任何(微软官方)资源记录了这个实现细节吗?“在调试模式下,_malloca总是从堆中分配内存。”。我的理解是,这意味着应用程序是针对调试CRT链接的。一个不明显的实现细节是,当crtdbg处于活动状态时,malloca()将永远不会从堆栈中进行分配。典型的海森堡。哎哟,听起来像个解释。但你能说得更详细一点吗?“crtdbg处于活动状态”的确切含义是什么?这是一个编译时的东西,在包含crtdbg头时通过宏激活,还是一个运行时的东西,在设置alloc钩子时激活?您知道有任何(微软官方)资源记录了这个实现细节吗?“在调试模式下,_malloca总是从堆中分配内存。”。我的理解是,这意味着应用程序是针对调试CRT链接的。