导航:首页 > 研究方法 > main方法执行之前发生了什么

main方法执行之前发生了什么

发布时间:2022-12-08 23:52:34

1. arm处理器在进入main函数之前都干些什么事情我的arm在执行主函数前尽然延时16秒。请教如何减少这个时间

1.一般都进行一些配置工作,但肯定不会这么久,确定是不是跑进中断中了,有可能的话试试单步调试跟踪一下。
2,硬件问题,硬件不稳定造成程序飞掉。

建议你从单步调试做起。

2. main函数执行以前还会执行什么代码

C++中,全局对象的构造函数会在main 函数之前执行。

在大多数的实现方式里,核心会运行专门的启动代码,启动代码会在启动main()之前完成所有的初始化工作,这其中当然包括了全局对象的初始化。

这个所谓的启动代码就是Runtime函数库的Startup代码。

(2)main方法执行之前发生了什么扩展阅读:

简介

程序执行总是从main函数开始,如果有有其他函数,则完成对其他函数的调用后再返回到主函数,最后由main函数结束整个程序。

在执行程序时,由系统调用main函数,main 函数是在程序启动中完成对具有静态存储期的非局部对象的初始化之后被调用的,main函数是程序在有宿主 (hosted)环境(亦即有操作系统)中所指定的入口点。

3. C语言中在main函数之前会执行什么

C语言执行本程序主函数始,本程序主函数结束 其余函数都调用程,至于文件类预编译命令既叫预编译编译前完预编译指令指示程序式编译前由编译器进行操作放程序任何位置。

4. c语言中在main函数之前会执行什么

main函数之前--真正的函数执行入口或开始

一种解释

实际上,在可执行文件被加载之后,控制权立即交给由编译器插入的Start函数,它将对后面这些全局变量进行准备:
_osver 操作系统的构件编号
_winmajor操作系统的主版本号
_winminor操作系统的次版本号
_winver操作系统完全版本号
__argc命令行参数个数
__argv指向参数字符串的指针数组
_environ指向环境变量字符串的指针数组
Start函数初始化堆并调用main函数.mian函数返回之后,Start函数调用Exit函数结束该进程.
启动函数Start的源代码在:
crt0.c Microsoft Visual C++
c0w.asm Borladn C++

5. C++程序进入main函数之前,退出main函数之后会做些什么

我们看下面的例子:

/* file name test00.c */

int main(int argc, char* argv)
{
return 0;
}

编译链接它:
cc test00.c -o test.exe
会生成 test.exe

但是我们加上这个选项: -nostdlib (不链接标准库)
cc test00.c -nostdlib -o test.exe
链接器会报错:
undefined symbol: __start

也就是说:
1. 编译器缺省是找 __start 符号,而不是 main
2. __start 这个符号是程序的起始点
3. main 是被标准库调用的一个符号
通常,我们会在编译器的环境中找到一个名字类似于 crt0.o 的文件,这个文件中包含了我们刚才所说的 __start 符号。

那么真正的 crt0.s 是什么样子呢?下面我们给出部分伪代码:

///////////////////////////////////////////////////////
section .text:
__start:

:
init stack;
init heap;
open stdin;
open stdout;
open stderr;
:
push argv;
push argc;
call _main; (调用 main)
:
destory heap;
close stdin;
close stdout;
close stderr;
:
call __exit;
////////////////////////////////////////////////////

总结:
main函数执行之前,主要就是初始化系统相关资源:
1.设置栈指针
2.初始化static静态和global全局变量,即data段的内容
3.将未初始化部分的赋初值:数值型short,int,long等为0,bool为FALSE,指针为NULL,等等,即.bss段的内容
4.运行全局构造器,估计是C++中构造函数之类的吧
5.将main函数的参数,argc,argv等传递给main函数,然后才真正运行main函数

main 函数之后会执行相反的工作。

6. 带main函数的类的初始化及main执行的顺序。

main方法是一个特殊的方法,在程序开始运行时,系统会找到main方法所在的那个class文件,然后把main方法的代码装入内存,从main的第一条语句开始执行,直到main的最后一条语句结束。至于main所在的类不用管它,它在main装入内存时不起作用的,只有创建这个类的对象时才起作用,也就是使用new的时候。在new一个类的对象时这个类的构造方法被调用,对成员变量初始化,分配内存,而此时类的成员方法,它不需要初始化,只有调用它时才分配内存,当方法执行完毕后内存立即释放。
如果还不明白可以加QQ聊聊,

7. 在典型的系统,比如win32,在调用C的main之前发生了什么事情,另外有时候main函数是

main函数代表进程的主线程。程序开始执行时,系统为程序创建了一个进程,main函数其实并不是首先被调用的函数,而是操作系统调用了C/C++运行期启动函数,该函数负责对C/C++运行库进行初始化,保证已经声明了的任何全局对象和静态对象在代码执行之前正确的创建。。。。完成这些之后,就调用进入点函数(控制台应用程序为main函数),并在main函数里进行一系列操作。。。。

8. JAVA中main方法是什么意思

main方法是一个特殊的方法,是程序执行的入口,一个Java程序从main方法开始执行。
Java虚拟机在执行Java程序之前会事先分配一个主线程,然后在主线程里面执行我们这个main方法,明白了吧?所以我们经常说main方法叫主线程!
线程就是一个程序里面不同的执行路径!算了,这些不理解也无所谓,总之,你就记住,Java程序从main方法开始执行,
比如:
public
static
void
main(String[]
args)
{
System.out.println("nihao");
}
在你这里当程序运行的时候,从main方法进来,然后做的第一件事就是System.out.println("nihao");
然后没有其他语句了,main方法执行结束,程序也就执行结束了!

9. .net里怎样在Main方法之前执行代码

研究过.net的高人也许已经知道了方法。 为什么在.net中Main方法是程序入口呢?那么Main方法和其他非Main的方法有什么差异呢?看下面代码:publicclass Program{ staticvoid Main() { Console.WriteLine("Main"); } staticvoid OtherMain() { Console.WriteLine("OtherMain"); }} Main()和OtherMain()方法就是输出的东西不一样,那我们再看一看两都的IL代码吧::.method private hidebysig staticvoid Main() cil managed{ .entrypoint // 代码大小 13 (0xd) .maxstack 8 IL_0000: nop IL_0001: ldstr "Main" IL_0006: call void [mscorlib]System.Console::WriteLine(string) IL_000b: nop IL_000c: ret} // end of method Program::Main.method private hidebysig staticvoid OtherMain() cil managed{ // 代码大小 13 (0xd) .maxstack 8 IL_0000: nop IL_0001: ldstr "OtherMain" IL_0006: call void [mscorlib]System.Console::WriteLine(string) IL_000b: nop IL_000c: ret} // end of method Program::OtherMain 从两者的比较我们可以看出Main方法生成的IL代码多了一条“.entrypoint”的指令,.entrypoint”什么意思?随便一看就知道是“进入点”,就是程序入口的意思了,而且一个程序(exe,非dll,dll是没有的)只能找到一个.entrypoint”,不信你可以找找。要在Main方法之前执行代码我们只要如下代码的样子,把入口改为OtherMain即可:publicclass Program{ staticvoid Main() { Console.WriteLine("Main"); } staticvoid OtherMain() { Console.WriteLine("OtherMain"); Main(); }} 编译,再用强大的反汇编程序——IL 反汇编程序打开编译好的exe文件,点击菜单文件》转储。保存后再用文件编辑工具打开(如notepad),将“.entrypoint”移动到OtherMain()的下面,保存,结果如下。 .method private hidebysig staticvoid OtherMain() cil managed { .entrypoint // 代码大小 19 (0x13) .maxstack 8 IL_0000: nop IL_0001: ldstr "OtherMain" IL_0006: call void [mscorlib]System.Console::WriteLine(string) IL_000b: nop IL_000c: call void Test.Program::Main() IL_0011: nop IL_0012: ret } // end of method Program::OtherMain 用ilasm编译修改好的文件,生成exe,再运行。看看结束是什么,是不是在输出“Main”之前输出了“OtherMain"。如果是,那恭喜你,程序入口修改成功!大家可以动手试试。 如果你觉得这种方法太麻烦了,那有个简单的方法。知道类型构造器(又称静态构造方法)吗?不知道?那先知道什么是类型构造器再看下面的。 类型构造器会在类第一次被使用的初始化类,在类的其他代码被执行前执行。想要在Main方法之前执行代码只要在包含Main方法的类里加一个类型构造器不就可以了:publicclass Program{ static Program() { Console.WriteLine("我执行了,Main方法还没执行哦!"); } staticvoid Main() { Console.WriteLine("Main"); }} 因为Main方法也是一个类的静态方法,也会符合CLR规范的。如果在类型构造器抛出一个异常,你知道会发生什么吗?

阅读全文

与main方法执行之前发生了什么相关的资料

热点内容
老年人多语症最佳治疗方法 浏览:29
构造方法在继承中如何调用 浏览:897
泡苏打水的正确方法 浏览:974
论文查找资料的方法有哪些 浏览:294
奶酪使用方法 浏览:979
肩周炎手术松解后的锻炼方法图解 浏览:142
什么方法如何追到摩羯座女 浏览:74
折弯运动计算方法 浏览:160
如何让手变细的方法 浏览:833
现代编程方法有哪些 浏览:4
数学归纳最佳方法 浏览:663
中小企业如何制定融资决策方法 浏览:840
铁矿石水分检测方法 浏览:859
乐视电视输入法设置在哪里设置方法 浏览:59
最佳资本结果的确定方法有哪些 浏览:136
什么样的焊接方法是轴不变形 浏览:544
古文背诵的技巧和方法 浏览:515
水怪如何使用方法 浏览:582
找正简单计算方法图纸 浏览:840
办公楼计算方法 浏览:226