资源描述:
《编译原理2E全套配套课件龙书 Chapter_seven(2).ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、COMPILERCONSTRUCTIONPrinciplesandPracticeKennethC.Louden7.RuntimeEnvironmentsPARTTWOContentsPartOne7.1MemoryOrganizationDuringProgramExecution7.2FullyStaticRuntimeEnvironments7.3Stack-BasedRuntimeEnvironmentsPartTwo7.4DynamicMemory7.5ParameterPassingMechanisms7.6ARuntimeEnvironmentfortheTINY
2、Language7.4DynamicMemory7.4.1FullyDynamicRuntimeEnvironmentsAstack-basedenvironmentwillresultinadanglingreferencewhentheprocedureisexitedifalocalvariableinaprocedurecanbereturnedtothecallerThesimplestexample:Int*dangle(void){intx;return&x;}Where,theaddressofalocalvariableisreturned.Anassignm
3、entaddr=dangle()nowcauseaddrtopointtoanunsafelocationintheactivationstackAsomewhatmorecomplexinstanceofadanglingreferenceoccursifalocalfunctioncanbereturnedbyacallTypedefint(*proc)(void);Procg(intx){intf(void)/*illegallocalfunction*/{returnx;}returnf;}main(){procc;c=g(2);printf(“%d”,c());/
4、*shouldprint2*/return0;}Ofcourse,ClanguageavoidstheaboveproblembyprohibitinglocalprocedureOtherlanguages,likeMudula-2,whichhavelocalproceduresaswellasprocedurevariables,parameters,andreturnedvalues,muststateaspecialrulethatmakessuchprogramerroneousInthefunctionalprogramminglanguages,suchasLI
5、SPandML,thefunctionsmustbeabletobelocallydefined,passedasparameters,andreturnedasresults.Thus,astack-basedruntimeenvironmentisinadequate,andamoregeneralformofenvironmentisrequired,calledFullyDynamicEnvironmentInfullydynamicenvironment,thebasicstructureofactivationrecordremainsthesame:Thespac
6、emustbeallocatedforparametersandlocalvariables,andthereisstillaneedforcontrolandaccesslinksWhencontrolisreturnedtothecaller,theexitedactivationrecordremainsinmemory,tobede-allocatedatsomelatertime7.4.2DynamicMemoryinObject-OrientedLanguagesOOlanguagerequiresspecialmechanismsintheruntimeenvir
7、onmenttoimplementtheiraddedfeatures:Objects,methods,inheritance,anddynamicbindingOOlanguagesvarygreatlyintheirrequirementsfortheruntimeenvironment.Twogoodrepresentativesoftheextreme:Smalltakerequiresfullydynamicenvironment;C++retainsthestack-basede