版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验序号:7 操作系统实验报告 实验项U名称:内存分配与空间分布 ZRZ 专业、班 18计卓1班 实验地点 指导教师 李远敏 实验时间 202065 一.实验目的及要求 L加深对谨程同步与通借概念的理解。 2学习并掌握利用信号量进行柑关编程,熟悉函数semget ()、semopt C)和semctl () 的使用。 3学习并掌握利用消息队列进行通借操作,熟悉函数msggetO. msgsndO . msgrcvO. msggctlO等与消息有关的操作调用 4学习并掌握利用共享内存进行相关应用,熟悉函数shmget ()、shmat ()、shmdt() 和shmctl C )的使用 二、实验
2、设备(环境)及要求 L Ubuntu操作系统环境 2.搭建Ubuntu操作系统下的C语言编程环境。 三.实验内容与步骤 1. mallocO freeO动态分配与回收内存,并査看堆区(heap)大小变化: (1) 使用Vi将程序淸单程序输入 (2) 利用gcc编译这个程序,写出编译命令和执行结果:如果不成功,尝试利用gdb调 试。运行编译后的目标程序。 (3) 仔细阅读程序并画出程序流程图。 (4) 分析程序:在该程序中査看动态内存(堆)大小变化有两种方式:一是通过编写程 序计数:一个是通过调用系统函数来显示,根据程序结果说明两种方式得到动态内存的大小 是否一致。 2.程序中代码、各种变量、常
3、量在内存空间中分布 (1) (2) 试。 (3) (4) (5) 使用Vi将以下程序输入。 利用gcc编译这个程序,写出编译命令和执行结果:如果不成功,尝试利用gdb调 运行两次编译后的目标程序。 仔细阅读程序,并画出程序流程图。 根据程序两次运行结果进行分析: a. 两个初始化的全局变量和一个初始化的静态局部变量在什么段进行分配,该段处于位 置? b. 两个未初始化的全局变量和一个未初始化的静态局部变量在什么段进行分配,该段处 于位置? C.三个局部变量在什么段进行分配,该段起始地址,分配是从高地址向低地址增长还是 低地址向高地址增长? d.使用malloc分配的三个小于128K大小的内存区
4、域,在什么段进行分配,该段处于位 31?分配是从高地址向低地址増长还是低地址向高地址增长? C.使用malloc分配的三个大于128K大小的内存区域,在那两个段之间进行空间分配 f.在两次运行结果中,哪些段中变量的地址是不变,而哪些段中变疑的地址是变化的 (6)本程序的打印每段的顺序是有编程来确宦,但假如编程者不知道每段在内存的分布情 况,需在编程时根据在该段的成员所在地址高低来确泄打印顺序,即低地址成员及对应地址 先打印,且打印同一段的第一成员时,要同时要打印对应段的名称相关信息。为适应这一需 求,应如何修改程序。 四、实验结果与数据处理 1.使用mallocO freeO动态分配与回收内存
5、,并査看堆区(heap)大小变化: (1) 实验结果: heapx (-*/) gedit E2i n ) 21:49 O 保存(S) 打开(Q) rn Sdeftne ARRAY_SIZE 200 tnt natnClnt drgc char* argv) char* ptr_arrARRAY_SIZE: Int V; 夂 C- 制衣符宽g: 8 行62,列2 插入 图1:代码 zqy(zqy-virtualrnachine:- TW文件(F)编辑(E杳看(W攫索(5)终端(T)裙助(H) count by Itself; heap_nalloc_total=8323072 heap_fre
6、e-total=0 heap_tn_use=8323O72 Wnnap_tot31=12054528 Pin3p_count=72 count by nalllnfo: heap_nalloc_tot31=8327168 he3p_free_total=2032 he3p_tn_use=8325136 nnap_total=1223B848 RRdp_count=72 fron nallocstats: 8327168 8326176 Arena 0: _.systembytes= tn usebytes= 20566016 29565024 72 12238848 Total (incl.
7、rvnap): _systembytes= in usebytes= Inax nnap regions = l?| sJRax mnap bytes = after count free by Itself: heap_RaH.oc_tot31=8323072 he3p_free_total=4194394 heap_i.n_use=4128768 nnapZtot31=6098832 nnap-count36 by mallxnf0: hGap_naXloc_tot31=8327ie8 he3p_free_total=4i96329 heap_tn_use=4i30848 mmap_tot
8、al=6119424 nmaP-Count=36 from nalloc.stats: Arena 0: system bytes= In use bytes= Total (Incl. nnap): systen bytes= tn use bytes= tax mnap regions = nax map bytes = count J Si W : 8327168 4130848 14446592 10250272 72 12238848 i 图2:程序运行结果 (2) 结果分析: 运行结果:通过程序计数的方法得到的动态内存大小和通过调用系统函数获得的动态内 存大小不一致,计数的大小会小
9、于系统所给岀的大小。 原因:在这个实验中,由于在系统的运行中由于某些变量的大小是会发生变化的,系统 在运行程序时通常会产生一些内零头,也就是一些变量直接的未左义区域,而不是简单地各 变量大小相加,所以就可以看到存在计数小于系统给出数据大小的情况:同时另外系统分配 内存算法也会影响占用内存的大小。 (3) 流程图: 图3:流程图 2程序中代码、各种变量、常量在内存空间中分布 (1)实验结果: matlocx (-/) gdit 虐I t* -) 22:02 保弃 打开(0) Pi static tnt bsS-Vd2; tnt stack_var0 = 1; Int stack_varl = 2
10、; Int staclc_var2 = 3; prtntfCTEXT SeggntXn); printfCAddress of naln : X pn*, prlntfC* prlntfCddress prlntf Cddress prtntf(Address printfC*BSS prlntfCAddress prlntf CAddress prtntfC Address DATA Segmentn): of ddtd_var0; : % of data van; : % of ddta_var2; : % Segnent of bss_tfarO of bsS-Varl of bss v
11、arZ nain); n); ;:X Pnj ;:离 Pn ;:* Pn W); 8bss_var0); Sbss.varl); pn*, pn*, adata_val); pn*, p5tfCSTACK Segment prlntfCAddress of 5tack_var9; : % prlntf CAddress prtntfC Address heap_ver0 heat) van pn : % pn”, of stackZvarZ; : %,: =Cchar*)nallocCl =fchar*Snellocf20481: prtntfC* EAP Segment- tf (heap_
12、var0) prlntf(Address of freeCheap_va); heap-Va0 = NULL; If If pnj =Cchar*)RallocC4096): =Cchdr*)nallocC1024 * =Cch3r*)naHoc(1024 * =Cch3r*)Ralloc(1024 * W); (heapvarl) prlntf(Address of freefheap.vdl); hedp_varl = NULL; Cheap_var2) prtntf(Address of freeCheap_var2); heap_var2 = NULL; heap_vare: heap
13、varl; heapvarz; prtntfC* nap Segmentn); If Cnnap_vare) prlntf(*Address of (wapvare; freeCnnap_v Rnap_var0 = NULL; If (帕ap-Varl) If 1024 1024 1024 * 512): * 512); * 512; pn, pn, pn, aheap_va2); p化 annapvare); printffAddress of rMn3p_varl; : X free(nRap_varl): mnap.varl = NULL; : nnap.vdr2 = NULL; ret
14、urn 0; 图4:代码 )1 2qy$2qy-vtrtual-nachlnc;*S /ealloc TEXT Segment- Address of natn : DATA Segnent- Address Address Address BSS Address Address Address 0X400666 oF ddta_var0; of data_vari; of data_var2; Segnent of bss_varQ;: of bss_varl;: of bss_va2;: STACK Segment Address of stack_varO; Address of sta
15、ck_varl; Address of stdck_var2: HEAP Segnent Address of heap var0; Address oF heap_varl; Address of heap_var2; nnap Segnent- Address of nnap_var0; Address of nnap_varl; Address of Ecap_var2; 0 x601058 0X6O105C 0 x601060 QK6Q1Q6C 0 x601070 0 x601068 0 x7ffea5fl3a8c 0 x7ffea5fl3a90 0 x7rfed5fl3d94 0 x
16、7ffea5fl3d98 0 x7fFed5fl3dd0 0 x7ffea5fl3aa8 0 x7ffed5fl3dbQ Ox7ffea5fl3ab8 Ox7ffGa5fl3ac0 zqvzqvvtrXudl上njuh丄ne:S zqyezqy-vlrtual.-machine./malloc TEXT Segment Address of nain :3x460666 DATA Segment Address Address Address BSS Address Address Address STACK Segment Address of stack_var0;: Address of
17、 stackvarl;: Address of stack_vdr2:: EAP Segment Address of heaP-Vdr9;: Address of heap.val;: Address of heap:vdr2;: nap Segment Address of nnap-Var9;: Address of mnap.val;: Address of nnap:var2;: zqy7qy virtual “chine of dat3_var3; Of dat3:vari; of dat3_var2; segment of bss_var0;: Of bssZvari;: of
18、bss_var2;: 0 x601058 OX60105C 6x601060 0 x68106c 0X601070 0 x661068 Ox7ffe75607dOc 9x7ffe756e7dl0 9x7ffe75607dl4 Ox7ffe75607dl8 x7ffe75607d2O Ox7ffe75607d28 OX7ffe75697d3O x7ffe75607d38 0X7ffe75697d-1O 图5:程序运行结果 (2)结果分析: 1)两个初始化的全局变量和一个初始化的静态局部变量在data段进行分配,该段处于 可执行文件中。 2)两个未初始化的全局变量和一个未初始化的静态局部变量在bs
19、s段进行分配,该段 处于可执行文件外的内存中。 3)三个局部变量在stack段进行分配,该段起始地址,分配是从高地址向低地址增长。 4)使用malloc分配的三个小于128K大小的内存区域,在heap段进行分配,该段处于 可执行文件外的内存中,分配是从低地址向高地址增长。 5)使用malloc分配的三个大于128K大小的内存区域,在nrniap段和bss段之间进行空 间分配 6)在两次运行结果中,t亡xt段、data段和bss段中变量的地址是不变,而stack段、 heap段和mraap段中变量的地址是变化的。 (3)程序修改; mdllocl.c (*/) gedit 毆I t| 44) 2
20、2:38 O nJT(O) Fl 保存 : Ifit f d3Ca_var0=lO; ddta_vdrl=20; bss_var0*bss_varl; 付9tn() tnt ddtd_var2=39: Int bss_v32; static static tnt stdck-VaO=l; Int stack_val=2; tnt stack2var2=3: long 1,j,dat33,b5s3,stack3,he3p(3,nmap(3 heap hea p hea p RRa p nna p nna p datao=ad3ta_var0: datdl= data2=ad3ta2var2: b
21、5s6= b5si= st3ck0=astack_v3ro: stack(l= st3ck2=astack2var2: heapO=Sheap varO; chap* char* char* char* char* char* vdrO=Cchar*)ndlloc(1024); var1=(char*)n3lloc(2048); var2=Cchar*)ndlloc(4096); var=(char*)R3lloc(1024*1024*512); varl=Cchar*)n3llocie24*1024*512); var2=(char*)R311oc1024*1024*512); 描入 C-
22、制畏符宽度:8 行11,列22 EQ s heapl二 var2; varO; van; _va2; free(heep_vare); heaP-Va0=NULL; free?heep_varl); heap_varl=NULL; freeTheepvarZ); heap_var2=NiJLL; free?npiep_var0); nndp_varO=NULl.; freeTpinepvarl); nndp_varl=NULL; free?Pin3p_var2); EEdp-Var2=NULL; pintf(”TEXT Segment n)i printf(*Address of mdin :
23、%pnnain); prlntfC* ATA SegRenTn); for(j=0:j3:j+) nin=0; forCi= C- 制衣符Sg: 8 行29,列26 插入 tJJT(O) R 盧I t| 4) 22:40 好 保存 prtntf(Address of stack_varl: :%pn 8stack_varl); break; case 2: prVntfCAddress of stack_var2; :Xpn, break; prtntfC EAP Signertn”): for(j=e;j3;j+) Rtn=0; for(t=6;i3:t 卄) Ifheapthe3pRtn)
24、 hG3pntn=0 xffffffffffff: 5witch(Rin) case 0: prtntf(Address of break; case 1: prtntfCAddress of break; case 2: heap_var0; :*pn*. 8heap_vdr03; heap_varl; :Xpn*, C 制表符宽度:8 行172,列22 描入 图6:修改后代码 zqyzqy-virtual-nachlne:$ ./mallocl TEXT segnent Address of main :0 x400656 DATA Segnent Address Address Address BSS Address Address Address STACK Segment Address of stackv
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年医疗美容答题题库及答案
- 2026年环境影响评价工程师之环评技术导则与标准考试题库500道及完整答案1套
- 2026年一级建造师之一建建筑工程实务考试题库500道附答案(轻巧夺冠)
- 2026年投资项目管理师之宏观经济政策考试题库300道带答案
- 2025年三峡水务考试试题及答案
- 2026年注册安全工程师题库300道附答案【夺分金卷】
- 2025年世界名著考试试题及答案
- 2026年二级注册建筑师之法律法规经济与施工考试题库500道附参考答案【模拟题】
- 2026年一级注册建筑师之建筑结构考试题库300道及答案【易错题】
- 2026年注册安全工程师题库300道及答案(基础+提升)
- 睡眠障碍课件
- 2024年第二届全国园林绿化职业技能竞赛(园林绿化工)决赛参考试题库(含答案)
- 2022年山东省职业院校技能大赛中职组“现代物流综合作业”赛项第二阶段第二部分运输作业优化竞赛试题
- 陈独秀生平事迹
- 非遗文化之漆扇介绍课件
- 食管癌免疫治疗的耐药机制与克服策略
- 2024年土地承包合作协议书
- 日语履历书志望动机范文
- 匹兹堡睡眠质量指数量表(pSQI)
- (完整版)兽医临床诊断学
- 应急第一响应人理论考试试卷(含答案)
评论
0/150
提交评论