0

MinGW 使用此代码作为每个程序的开始

static void  __attribute__((noreturn)) __mingw_CRTStartup (void)    
{
  int nRet;
  SetUnhandledExceptionFilter (_gnu_exception_handler);
  _fpreset ();  
  _mingw32_init_mainargs ();
  _mingw32_init_fmode ();
  _pei386_runtime_relocator ();
  asm  __volatile__  ("andl $-16, %%esp" : : : "%esp");
  nRet = main (_argc, _argv, environ);
  _cexit ();
  ExitProcess (nRet);
}

ExitProcess(nRet);对于终止所有线程并处理返回值的行,Linux 的替代方案是什么?在哪里可以找到 Linux/OS X gcc 运行时的源代码?Linux-GCC/XCode 运行时是否会终止所有线程?如果不是,它如何处理 main 的返回值?

4

1 回答 1

0

相应的代码,在“glibc”中比上面的 MingW 代码要复杂一些(因为它有很多选项,它们都有与之相关的编译块和运行时选项):

http://sourceware.org/git/?p=glibc.git;a=blob;f=csu/libc-start.c;h=a14ed71616a3f63f092837e9c30780f8344b4fbe;hb=cvs/glibc-2_9-branch

但是,简单的观点是它确实:

result = main (argc, argv, __environ MAIN_AUXVEC_PARAM);
exit (result);

是的,exit会杀死所有线程(如果没有别的,当系统调用退出时,操作系统会在_exit().

于 2013-08-23T11:03:26.457 回答