C程序设计C程序设计 (41).pdf
《C程序设计C程序设计 (41).pdf》由会员分享,可在线阅读,更多相关《C程序设计C程序设计 (41).pdf(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C C程序设计程序设计Programming in CProgramming in C设计函数函数间的数据传递(设计函数函数间的数据传递(2 2)1、程序映像2、程序加载C C程序设计程序设计程序设计程序设计3 34.6.4 4.6.4 程序映像和内存布局程序映像和内存布局1程序映像C源程序经过编译、连接后,成为二进制形式的可执行文件,称为程序映像。可执行文件采用ELF格式(可执行连接格式)存储。4 44.6.4 4.6.4 程序映像和内存布局程序映像和内存布局可执行连接格式(ELF,Executable and Linkable Format)。5 54.6.4 4.6.4 程序映像和内存布
2、局程序映像和内存布局Helloworld程序映像#include int#include int mainmain()()printfprintf(hello,world(hello,worldnn););returnreturn 0 0;6 64.6.4 4.6.4 程序映像和内存布局程序映像和内存布局可执行连接格式ELF内容包含程序指令、已初始化的静态数据和其他一些重要信息,例如未初始化的静态数据空间大小、符号表(symbol table),调试信息(debugging information)、动态共享库的链接表(linkage tables for dynamic shared lib
3、raries)等。7 74.6.4 4.6.4 程序映像和内存布局程序映像和内存布局图4.9 可执行文件映像与内存映像8 84.6.4 4.6.4 程序映像和内存布局程序映像和内存布局2程序加载运行程序时,由操作系统将可执行文件载入到计算机内存中,成为一个进程(process)。程序在内存中的布局由5个段(segment)组成。9 94.6.4 4.6.4 程序映像和内存布局程序映像和内存布局1代码段代码段(text segment)存放程序执行的机器指令(machine instructions)。通常情况下,text段是可共享的,使其可共享的目的是对于频繁被执行的程序,只需要在内存中有一份
4、副本即可。text段通常也是只读的,使其只读的原因是防止一个程序意外地修改了它的指令。10104.6.4 4.6.4 程序映像和内存布局程序映像和内存布局C程序的表达式、语句、函数等编译成机器指令就存放于text段。程序运行时由操作系统从程序映像中取出text段,布局在程序内存地址最低的区域,然后跳转到text段的main函数开始运行程序,程序结束后由操作系统收回这段内存区域。11114.6.4 4.6.4 程序映像和内存布局程序映像和内存布局#include#include int#include#include int K K=1010;/存放data段/存放data段floatfloat
5、 f f;/存放bss段/存放bss段intint mainmain()()static intstatic int i i=5 5;/存放data段/存放data段doubledouble d d=5 5;/存放stack段/存放stack段charchar*p p;p p=mallocmalloc(1 1););/存放heap段/./存放heap段/.freefree(p p););/释放heap段/释放heap段returnreturn 0 0;程序加载后的内存映像12124.6.4 4.6.4 程序映像和内存布局程序映像和内存布局2已初始化数据段已初始化数据段(data segment
6、)用来存放C程序中所有已赋初值的全局和静态变量、对象,也包括字符串、数组等常量,但基本类型的常量不包含其中,因为这些常量被编译成指令的一部分存放于text段。13134.6.4 4.6.4 程序映像和内存布局程序映像和内存布局#include#include int#include#include int K K=1010;/存放data段/存放data段floatfloat f f;/存放bss段/存放bss段intint mainmain()()static intstatic int i i=5 5;/存放data段/存放data段doubledouble d d=5 5;/存放stac
7、k段/存放stack段charchar*p p;p p=mallocmalloc(1 1););/存放heap段/./存放heap段/.freefree(p p););/释放heap段/释放heap段returnreturn 0 0;程序加载后的内存映像14144.6.4 4.6.4 程序映像和内存布局程序映像和内存布局程序运行时由操作系统从程序映像中取出data段,布局在程序内存地址较低的区域。程序结束后由操作系统收回这段内存区域,即释放data段。显然,data段的存储单元有与程序代码相同的生命期,它们的初始值实际在编译时就已经确定了。即使程序没有运行,这些存储单元的初始值也固定下来了,当
8、程序开始运行时,这些存储单元是没有初始化的动作。在程序运行中,data段的存储单元数据会一直保持到改变为止,或保持到程序结束为止。15154.6.4 4.6.4 程序映像和内存布局程序映像和内存布局3未初始化数据段未初始化数据段(bss segment)用来存放C程序中所有未赋初值的全局和静态变量。在程序映像中没有存储bss段,只有它的空间大小信息;程序运行前由操作系统根据这个大小信息分配bss段,且数据值全都初始化为0,布局在与data段相邻的区域。程序结束后由操作系统收回这段内存区域,即释放bss段。16164.6.4 4.6.4 程序映像和内存布局程序映像和内存布局#include#in
9、clude int#include#include int K K=1010;/存放data段/存放data段floatfloat f f;/存放bss段/存放bss段intint mainmain()()static intstatic int i i=5 5;/存放data段/存放data段doubledouble d d=5 5;/存放stack段/存放stack段charchar*p p;p p=mallocmalloc(1 1););/存放heap段/./存放heap段/.freefree(p p););/释放heap段/释放heap段returnreturn 0 0;程序加载后的内
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C程序设计C程序设计 41 程序设计 41
限制150内