Machine-LevelProgrammingIV:
Data
Instructors:RandalE.BryantandDavidR.O’Hallaron张悠慧
ArraysOne-dimensionalMulti-dimensional(nested)Multi-levelStructuresAllocationAccessAlignment
ArrayAllocationBasicPrincipleTA[L];ArrayofdatatypeTandlengthLContiguouslyallocatedregionofL*sizeof(T)bytesinmemorycharstring[12];xx+12intval[5];xx+4x+8x+12x+16x+20doublea[3];x+24xx+8x+16char*p[3];xx+8x+16x+24
ArrayExampleDeclaration“zip_digcmu”equivalentto“intcmu[5]”Examplearrayswereallocatedinsuccessive20byteblocksNotguaranteedtohappeningeneral#defineZLEN5typedefintzip_dig[ZLEN];zip_digcmu={1,5,2,1,3};zip_digmit={0,2,1,3,9};zip_digucb={9,4,7,2,0};zip_digcmu;15213162024283236zip_digmit;02139364044485256zip_digucb;94720566064687276
Multidimensional(Nested)ArraysDeclarationTA[R][C];2DarrayofdatatypeTRrows,CcolumnsTypeTelementrequiresKbytesArraySizeR*C*KbytesArrangementRow-MajorOrderingA[0][0]A[0][C-1]A[R-1][0]??????????A[R-1][C-1]??????intA[R][C];?????A[0][0]A[0][C-1]?????A[1][0]A[1][C-1]?????A[R-1][0]A[R-1][C-1]?????4*R*CBytes
NestedArrayExample“zip_digpgh[4]”equivalentto“intpgh[4][5]”Variablepgh:arrayof4elements,allocatedcontiguouslyEachelementisanarrayof5int’s,allocatedcontiguously“Row-Major”orderingofallelementsinmemory#definePCOUNT4zip_digpgh[PCOUNT]={{1,5,2,0,6},{1,5,2,1,3},{1,5,2,1,7},{1,5,2,2,1}};zip_digpgh[4];769611613615615206152131521715221
?????NestedArrayRowAccessRowVectorsA[i]isarrayofCelementsEachelementoftypeTrequiresKbytesStartingaddressA+i*(C*K)?????A[i][0]A[i][C-1]A[i]?????A[R-1][0]A[R-1][C-1]A[R-1]?????A?????A[0][0]A[0][C-1]A[0]A+(i*C*4)A+((R-1)*C*4)intA[R][C];
Multi-LevelArrayExampleVariableunivdenotesarrayof3elementsEachelementisapointer8bytesEachpointerpointstoarrayofint’szip_digcmu={1,5,2,1,3};zip_digmit={