【发布时间】:2011-01-21 20:01:25
【问题描述】:
出于某种原因,我应该使用 gcc 编译一个 C 文件,然后链接到 Visual C++ 2008 项目。
(我用的是当前最新的gcc版本:cygwin gcc 4.3.4 20090804。)
但是有一个问题:gcc总是用_alloca分配一个大数组,
VC 链接器无法解析符号 __alloca。
例如,
int func()
{
int big[10240];
....
}
虽然我没有显式调用 _alloca 函数,但这段代码产生了 _alloca 依赖项。
(数组大小很重要。如果我更改 10240 -> 128,一切正常)
我尝试了 gcc 选项 -fno-builtin-alloca 或 -fno-builtin,但没有运气。
是否可以让 gcc 不使用 _alloca ? (或调整阈值?)
【问题讨论】:
-
为什么不直接使用
malloc()? -
这不是我的书面来源,编辑起来有些复杂。也许原作者不希望惩罚调用malloc。
-
在这种情况下,alloca 的目的是确保堆栈足够大以容纳此数组。 Microsoft 编译器不需要 alloca;它将这个堆栈探测代码直接发送到函数中。当本地人很小时,不需要堆栈探针。如果不使用 -fno-builtin-alloca 和 -fno-builtin 会怎样?
-
哦,天哪,10k 是一个巨大的对象,无论它是否有效,都是一个可怕的想法。你能把代码改成不这样做吗?
-
@ephe: (1) 这不是他的代码。 (2) 在没有适当的
free的情况下更改为malloc会导致泄漏。
标签: visual-c++ gcc alloca