知道程序语言的构成,才可以去解析语言(编译器的工作);
C程序(C语言编写的程序)的组成:
-
正文段(文本段)
cpu执行的机器指令部分;
通常,正文段可共享---频繁执行的程序在存储器中也只需要一个副本;
通常,正文段是只读的---防止程序意外修改其指令;
-
初始化数据段(数据段)
包含程序中需明确赋初值的变量;
-
未初始化的数据段(bss段,block started by symbol---由符号开始的块)
程序开始执行前,内核将此段中的数据初始化为0或空指针;
-
栈(stack)
自动变量(过程结束自动释放的变量,一个函数就是一个过程)以及每次函数调用时所需保存的信息都存放在此段中;
每次函数调用时,其返回地址以及调用者的环境信息(某些机器寄存器的值)都保存在栈中;
最近被调用的函数在栈上为其自动和临时变量分配存储空间(栈动态分配---编译器的工作);
-
堆(heap)
通常,在堆中进行动态存储分配;
堆位于未初始化数据段与栈之间(历史形成的惯例);

动态存储方式:
在程序运行期间根据需要进行动态分配存储空间的方式;
动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完立即释放;
静态存储方式:
在程序编译时分配固定的存储空间的方式;
变量(全局变量、静态变量)定义时就分顶存储单元并一直保持不变,知道程序运行结束;
动态内存分配(堆):发生自强程序调入和执行时,动态地分配或者回收存储空间的分配内存的方法;
静态内存分配:发生在程序编译和链接的时,预先分配存储空间(栈可以是静态分配如全局变量,也可以是动态分配;,栈动态分配是由编译器进行释放);
参考书籍:Unix环境高级编程
C程序由正文段、初始化数据段、未初始化数据段(bss段)、栈和堆组成。正文段包含机器指令,通常是只读且可共享。数据段存储已赋初值的变量,bss段在程序开始时由内核初始化为0或空指针。栈用于自动变量和函数调用信息,动态分配存储空间。堆则用于程序运行时的动态内存分配,静态存储方式包括全局变量和静态变量的分配。
1185

被折叠的 条评论
为什么被折叠?



