我有代码
#include <stdlib.h>
void *gg = malloc(55);
int main(int argc, char **argv)
{
return 0;
}
gcc无法编译,但是g ++可以工作。
因此,我只想确保在执行main之前发生malloc调用。
答案 0 :(得分:8)
您的工作在C ++中是允许的。 C ++标准在"Dynamic initialization of non-local variables"上有一整节。
在程序集generated by GCC中查找代码具有指导意义:
在这里,初始化程序通过两个生成的函数_GLOBAL__sub_I_gg
(在main
之前被调用)调用,该函数依次调用__static_initialization_and_destruction_0
。
在后一个函数的主体内,您可以找到对malloc
的调用。