【发布时间】:2016-10-13 20:54:01
【问题描述】:
我的stackAlloc 函数如下所示:
void* stackAlloc(size_t size) {
if (size > maxStackAllocation)
return malloc(size);
else
return _alloca(size);
}
void stackAllocFree(void *ptr, size_t size) {
if (size > maxStackAllocation) {
free(ptr);
}
}
如果我更改,stackAlloc 函数总是使用 malloc 而不是 alloca 一切正常。
我将函数更改为宏,现在它按预期工作:
#define maxStackAllocation 1024
#define stackAlloc(size) \
( \
(size > maxStackAllocation)? \
malloc(size): \
_alloca(size) \
)
#define stackAllocFree(ptr, size) \
( \
(size > maxStackAllocation)? \
free(ptr): \
void() \
)
【问题讨论】:
-
maxStackAllocation的值是多少?我建议您也阅读alloca文档页面上的所有警告。 -
它的1024,我这里只分配124字节
-
stackoverflow.com/a/1029951/366904(既然 Vulkan 显然是一个 C API,为什么不使用变长数组?)
-
我用的是VS2015,不支持
-
@dev 你在说什么?他的代码按照您描述的方式工作。如果
stackAlloc调用malloc,那么stackAllocFree调用free。没有理由释放_alloca释放的内存。