写给初学者,转载请注明出处
yanzhong.lee
以下是我自己总结的,可能与科班出生的软件高手们想法有出入,欢迎指正。
一个程序从设计到运行结束供经历好几个阶段,没一个阶段负责不同的任务。
(1)程序的设计期,主要设计整体框架以及每个功能模块;大家常用UML语言来设计软件框架;
(2)软件的编译时期,这个时间主要是将用C++语言写的代码编译成机器码或者是过渡时间的语言形式;这个时期的任务是由编译器负责;
(3)软件的链接期,这个时期是在编译之后,编译后的各个模块(以文件为单位)需要相互之间以及和一些必须的库之间进行连接,只有链接后才生成可执行格式的文件。链接期的功能由连接器负责;
(4)程序要运行,必须先进行加载,只有加载到系统中才能运行,这就是程序的加载期,加载工作是由系统的加载器负责的,在加载的过程中会提供初始化一些变量或对象的操作;
(5)运行期,这时期就是程序加载后一条条执行程序指令的时期,这个时期也会初始化一些零时变量的工作等;
小结:
由此可见,程序在编译连接时只是生成一种二进制文件而已,并没有为其定义的变量进行初始化,更没有为其用到的所有变量分配内存,只是给出一要分配这些变量的一些规划性说明,只有到程序被加载器加载和程序真正运行时才会为其用到的变量初始化或分配内存。
全局变量、静态变量是在程序加载时被初始化的,这些变量位于一块静态的内存区域;局部用到的变量都是运行时被分配内存并初始化的,这变量位于栈上或者是堆上,例如用new或mallc得到的变量都是在堆上,而普通的函数内局部变量就是临时分配在栈上,栈是由系统使用并维护的,而堆是要程序员自己维护的。
写给初学者,转载请注明出处
yanzhong.lee
以下是我自己总结的,可能与科班出生的软件高手们想法有出入,欢迎指正。
一个程序从设计到运行结束供经历好几个阶段,没一个阶段负责不同的任务。
(1)程序的设计期,主要设计整体框架以及每个功能模块;大家常用UML语言来设计软件框架;
(2)软件的编译时期,这个时间主要是将用C++语言写的代码编译成机器码或者是过渡时间的语言形式;这个时期的任务是由编译器负责;
(3)软件的链接期,这个时期是在编译之后,编译后的各个模块(以文件为单位)需要相互之间以及和一些必须的库之间进行连接,只有链接后才生成可执行格式的文件。链接期的功能由连接器负责;
(4)程序要运行,必须先进行加载,只有加载到系统中才能运行,这就是程序的加载期,加载工作是由系统的加载器负责的,在加载的过程中会提供初始化一些变量或对象的操作;
(5)运行期,这时期就是程序加载后一条条执行程序指令的时期,这个时期也会初始化一些零时变量的工作等;
小结:
由此可见,程序在编译连接时只是生成一种二进制文件而已,并没有为其定义的变量进行初始化,更没有为其用到的所有变量分配内存,只是给出一要分配这些变量的一些规划性说明,只有到程序被加载器加载和程序真正运行时才会为其用到的变量初始化或分配内存。
全局变量、静态变量是在程序加载时被初始化的,这些变量位于一块静态的内存区域;局部用到的变量都是运行时被分配内存并初始化的,这变量位于栈上或者是堆上,例如用new或mallc得到的变量都是在堆上,而普通的函数内局部变量就是临时分配在栈上,栈是由系统使用并维护的,而堆是要程序员自己维护的。