我们在C或C ++中定义的主函数是在进程或线程中运行的吗? 如果它在一个线程中运行,哪个进程负责产生它
答案 0 :(得分:3)
这是您执行程序时产生的进程。主程序在程序开始时调用。它都是同一个程序的一部分(即一个过程)。
答案 1 :(得分:3)
main()是程序的入口点。 C ++(无论如何当前的C ++)不知道进程或线程是什么。 “过程”这个词甚至不在标准的索引中。 main()之前和之后发生的事情主要是实现定义。因此,您的问题的答案也是实现定义。
一般来说,虽然大多数操作系统都有进程和线程的概念,但它们具有相似的含义(例如,在Linux中,线程实际上是一个“轻量级进程”)。您通常可以假设您的程序将在新进程中启动,然后在实现定义初始化之后,原始线程将调用main()。
由于实现有足够的空间和/或你在调用main之前启动了一大堆线程,尽管你可能通常会想要在执行线程期间调用main()。考虑它的最佳方式可能是标准,除非你真的需要考虑实现。该标准目前不知道进程或线程是什么。 C ++ 0x将以某种方式改变它,但我不确定新概念将是什么或它们将如何与OS特定结构相关。
我的答案是在问题的C ++语言部分专门解决的。 C是一种不同的语言,我在10年内没有使用它,所以我忘记了如何指定全局初始化。
答案 2 :(得分:2)
当您要求操作系统启动新进程时,它会初始化进程的数据结构以及该进程内的单个线程。该线程上下文中的初始指令指针是进程入口点,它是C运行时库提供的函数。该库提供的入口点将环境表和命令行参数转换为C标准所要求的格式,然后调用主函数。
答案 3 :(得分:1)
你的整个程序是一个单一的过程,除非它启动fork()
事物,并且默认情况下该过程有一个线程可以完成所有事情; main()
从该线程开始