Machine-Level Programming 6 Structured Data Topics Structs Unions.

Slides:



Advertisements
Similar presentations
Machine/Assembler Language Putting It All Together Noah Mendelsohn Tufts University Web:
Advertisements

Dynamic Memory Allocation I Topics Basic representation and alignment (mainly for static memory allocation, main concepts carry over to dynamic memory.
Machine-Level Programming IV: Structured Data Feb 5, 2004 Topics Arrays Structs Unions class08.ppt “The course that gives CMU its Zip!”
University of Washington Data Structures! Arrays  One-dimensional  Multi-dimensional (nested)  Multi-level Structs  Alignment Unions 1.
Carnegie Mellon 1 Machine-Level Programming V: Advanced Topics : Introduction to Computer Systems 8 th Lecture, Sep. 16, 2010 Instructors: Randy.
Structured Data: Sept. 20, 2001 Topics Arrays Structs Unions class08.ppt “The course that gives CMU its Zip!”
Machine-Level Programming IV: Data Sept. 19, 2007 Structured Data Arrays Structs UnionsData/Control Buffer overflow class07.ppt F’07.
Machine-Level Programming IV: Structured Data Apr. 23, 2008 Topics Arrays Structures Unions EECS213.
Machine-Level Programming IV: Structured Data Topics Arrays Structures Unions CS213.
– 1 – EECS213, S’08 Alignment Aligned Data Primitive data type requires K bytes Address must be multiple of K Required on some machines; advised on IA32.
Structured Data II Heterogenous Data Sept. 22, 1998 Topics Structure Allocation Alignment Operating on Byte Strings Unions Byte Ordering Alpha Memory Organization.
Data Representation and Alignment Topics Simple static allocation and alignment of basic types and data structures Policies Mechanisms.
– 1 – Referencing Examples Code Does Not Do Any Bounds Checking! ReferenceAddressValueGuaranteed? mit[3]36 + 4* 3 = 483 Yes mit[5]36 + 4* 5 = 566 No mit[-1]36.
Ithaca College 1 Machine-Level Programming VIII: Advanced Topics: alignment & Unions Comp 21000: Introduction to Computer Systems & Assembly Lang Systems.
Machine-Level Programming III: Procedures Topics IA32 stack discipline Register saving conventions Creating pointers to local variables class07.ppt.
Machine-Level Programming IV: Structured Data Topics Arrays Structs Unions CS 105 “Tour of the Black Holes of Computing”
Info stored in computer (memory) Numbers All in binaray – can be converted to octal, hex Characters ASCII – 1-byte/char Unicode – 2-byte/char Unicode-table.com/en.
Instructors: Gregory Kesden and Markus Püschel
University of Amsterdam Computer Systems – Data in C Arnoud Visser 1 Computer Systems New to C?
Machine-level Programming IV: Data Structures Topics –Arrays –Structs –Unions.
Lecture 9 Aggregate Data Organization Topics Pointers Aggregate Data Array layout in memory Structures February 14, 2012 CSCE 212 Computer Architecture.
University of Washington Today Lab 3 out  Buffer overflow! Finish-up data structures 1.
Carnegie Mellon 1 Bryant and O’Hallaron, Computer Systems: A Programmer’s Perspective, Third Edition Machine-Level Programming IV: Data Topics: Arrays.
Fabián E. Bustamante, Spring 2007 Machine-Level Prog. IV - Structured Data Today Arrays Structures Unions Next time Arrays.
Machine-Level Programming IV: Structured Data
Carnegie Mellon 1 Bryant and O’Hallaron, Computer Systems: A Programmer’s Perspective, Third Edition Machine-Level Programming IV: Data MCS284: Computer.
Machine-Level Programming IV: Structured Data Topics Arrays Structs Unions CS 105 “Tour of the Black Holes of Computing”
Carnegie Mellon /18-243: Introduction to Computer Systems Instructors: Bill Nace and Gregory Kesden (c) All Rights Reserved. All work.
Recitation 3 Outline Recursive procedure Complex data structures –Arrays –Structs –Unions Function pointer Reminders Lab 2: Wed. 11:59PM Lab 3: start early.
Carnegie Mellon 1 Bryant and O’Hallaron, Computer Systems: A Programmer’s Perspective, Third Edition Machine-Level Programming IV: Data Slides adapted.
Carnegie Mellon 1 Machine-Level Programming V: Advanced Topics / : Introduction to Computer Systems 9 th Lecture, Sep. 25, 2012 Instructors:
Lecture 9 Aggregate Data Topics Arrays Structs Unions again Lab 02 comments Vim, gedit, February 22, 2016 CSCE 212 Computer Architecture.
1 Binghamton University Machine-Level Programming V: Advanced Topics CS220: Computer Systems II.
Carnegie Mellon 1 Machine-Level Programming V: Advanced Topics Slides courtesy of: Randy Bryant & Dave O’Hallaron.
Instructor: Fatma CORUT ERGİN
Big-Endians Little-Endians and Bi-Endians
Machine-Level Programming V: Miscellaneous Topics
Machine-Level Programming IV: Data
Machine-Level Programming IV: Data
Machine-Level Programming IV: Structured Data
Instructors: Gregory Kesden
Machine-Level Programming IV: Structured Data Sept. 30, 2008
Heterogeneous Data Structures & Alignment
Referencing Examples Code Does Not Do Any Bounds Checking!
Machine-Level Programming IV: Data CSCE 312
Machine-level Programming IV: Data Structures
Feb 2 Announcements Arrays/Structs in C Lab 2? HW2 released
Machine-Level Programming IV: Data September 8, 2008
Machine-Level Programming 6 Structured Data
Machine-Level Programming IV: Structured Data Sept. 19, 2002
Machine-Level Programming IV: Data
Roadmap C: Java: Assembly language: OS: Machine code: Computer system:
Instructor: Phil Gibbons
Instructors: Majd Sakr and Khaled Harras
Machine-Level Programming IV: Structured Data
Structured Data II Heterogenous Data Feb. 15, 2000
Machine-Level Programming IV: Data
Instructors: Majd Sakr and Khaled Harras
Machine Level Representation of Programs (III)
Machine-Level Programming IV: Machine Data 9th Lecture
Machine-Level Programming 5 Structured Data
Comp Org & Assembly Lang
Machine-Level Programming V: Advanced Topics
Machine-Level Programming IV: Structured Data
Instructor: Fatma CORUT ERGİN
Data Spring, 2019 Euiseong Seo
Machine-Level Programming IV: Structured Data
Machine-Level Programming IV: Data
Machine-Level Programming IV: Structured Data
Machine-Level Programming IV: Structured Data
Presentation transcript:

Machine-Level Programming 6 Structured Data Topics Structs Unions

– 2 – CMSC 313, F’09 Concept Contiguously-allocated region of memory Refer to members within structure by names Members may be of different types Accessing Structure Member struct rec { int i; int a[3]; int *p; }; IA32 Assembly # %eax = val # %edx = r movl %eax,(%edx)# Mem[r] = val void set_i(struct rec *r, int val) { r->i = val; } Structures Memory Layout iap

– 3 – CMSC 313, F’09 struct rec { int i; int a[3]; int *p; }; # %ecx = idx # %edx = r leal 0(,%ecx,4),%eax# 4*idx leal 4(%eax,%edx),%eax# r+4*idx+4 int * find_a (struct rec *r, int idx) { return &r->a[idx]; } Generating Pointer to Struct. Member Generating Pointer to Array Element Offset of each structure member determined at compile time iap 0416 r *idx r

– 4 – CMSC 313, F’09 struct rec { int i; int a[3]; int *p; }; void set_p(struct rec *r) { r->p = &r->a[r->i]; } Structure Referencing (Cont.) C Code ia 0416 Element i iap 0416 # %edx = r movl (%edx),%ecx# r->i leal 0(,%ecx,4),%eax# 4*(r->i) leal 4(%edx,%eax),%eax# r+4+4*(r->i) movl %eax,16(%edx)# Update r->p

– 5 – CMSC 313, F’09 The sizeof( ) a struct struct rec { int i; int a[3]; int *p; }; The size of a struct is not always what is seems. printf(“ The sizeof struct rec = %d\n”, sizeof(struct rec)); printf(“ The sizeof struct S1 = %d\n”, sizeof(struct S1)); /* output on Linux */ The sizeof struct rec = 20 The sizeof struct S1 = 20 struct S1 { char c; int i[2]; double v; // 8 bytes };

– 6 – CMSC 313, F’09 Alignment Aligned Data Primitive data type requires K bytes Address must be multiple of K Required on some machines; advised on IA32 treated differently by IA32 Linux and Windows! Motivation for Aligning Data Memory accessed by (aligned) chunks of 4 or 8 bytes (system dependent) Inefficient to load or store datum that spans quad word boundaries Virtual memory very tricky when datum spans 2 pagesCompiler Inserts gaps in structure to ensure correct alignment of fields

– 7 – CMSC 313, F’09 Specific Cases of Alignment (IA32) Size of Primitive Data Type: 1 byte (e.g., char) no restrictions on address 2 bytes (e.g., short ) lowest 1 bit of address must be bytes (e.g., int, float, char *, etc.) lowest 2 bits of address must be bytes (e.g., double ) Windows (and most other OS’s & instruction sets): »lowest 3 bits of address must be Linux: »lowest 2 bits of address must be 00 2 »i.e., treated the same as a 4-byte primitive data type 12 bytes ( long double ) Windows, Linux: »lowest 2 bits of address must be 00 2 »i.e., treated the same as a 4-byte primitive data type

– 8 – CMSC 313, F’09 struct S1 { char c; int i[2]; double v; } *p; Satisfying Alignment with Structures Offsets Within Structure Must satisfy element’s alignment requirement Overall Structure Placement Each structure has alignment requirement K Largest alignment of any element Initial address & structure length must be multiples of K Example (under Windows): K = 8, due to double element ci[0]i[1]v p+0p+4p+8p+16p+24 Multiple of 4Multiple of 8

– 9 – CMSC 313, F’09 Different Alignment Conventions IA32 Windows: K = 8, due to double element IA32 Linux K = 4; double treated like a 4-byte data type struct S1 { char c; int i[2]; double v; } *p; ci[0]i[1]v p+0p+4p+8p+16p+24 Multiple of 4Multiple of 8 ci[0]i[1] p+0p+4p+8 Multiple of 4 v p+12p+20 Multiple of 4

– 10 – CMSC 313, F’09 Overall Alignment Requirement struct S2 { double x; int i[2]; char c; } *p; struct S3 { float x[2]; int i[2]; char c; } *p; p+0p+12p+8p+16 Windows : p+24 Linux : p+20 ci[0]i[1]xci[0]i[1] p+0p+12p+8p+16p+20 x[0]x[1] p+4 p must be multiple of: 8 for IA32 Windows 4 for IA32 Linux p must be multiple of 4 (all cases)

– 11 – CMSC 313, F’09 Ordering Elements Within Structure struct S4 { char c1; double v; char c2; int i; } *p; struct S5 { double v; char c1; char c2; int i; } *p; c1iv p+0p+20p+8p+16p+24 c2c1iv p+0p+12p+8p+16 c2 10 bytes wasted space in Windows 2 bytes wasted space

– 12 – CMSC 313, F’09 Arrays of Structures Principle Allocated by repeating allocation for array type In general, may nest arrays & structures to arbitrary depth a[0] a+0 a[1]a[2] a+12a+24a+36 struct S6 { short i; float v; short j; } a[10]; a+12a+20a+16a+24 a[1].ia[1].ja[1].v

– 13 – CMSC 313, F’09 Accessing Element within Array Compute offset to start of structure Compute 12*i as 4*(i+2i) Access element according to its offset within structure Offset by 8 Assembler gives displacement as a + 8 »Linker must set actual value a[0] a+0 a[i] a+12i short get_j(int idx) { return a[idx].j; } # %eax = idx leal (%eax,%eax,2),%eax # 3*idx movswl a+8(,%eax,4),%eax a+12ia+12i+8 struct S6 { short i; float v; short j; } a[10]; a[i].ia[i].ja[i].v

– 14 – CMSC 313, F’09 Satisfying Alignment within Structure Achieving Alignment Starting address of structure array must be multiple of worst-case alignment for any element a must be multiple of 4 Offset of element within structure must be multiple of element’s alignment requirement v ’s offset of 4 is a multiple of 4 Overall size of structure must be multiple of worst-case alignment for any element Structure padded with unused space to be 12 bytes struct S6 { short i; float v; short j; } a[10]; a[0] a+0 a[i] a+12i a+12ia+12i+4 a[1].ia[1].ja[1].v Multiple of 4

– 15 – CMSC 313, F’09 Unions in C  A union is a variable type that may hold different type of members of different sizes, BUT you can only use one type at a time. All members of the union share the same memory. The compiler assigns enough memory for the largest of the member types.  The syntax for defining a union and using its members is the same as the syntax for a struct.

– 16 – CMSC 313, F’09 Union Allocation Principles Overlay union elements Allocate according to largest element Can only use one field at a time union U1 { char c; int i[2]; double v; } *up; c i[0]i[1] v up+0up+4up+8 struct S1 { char c; int i[2]; double v; } *sp; ci[0]i[1]v sp+0sp+4sp+8sp+16sp+24 (Windows alignment)

– 17 – CMSC 313, F’09 Byte Ordering Revisited Idea Short/long/quad words stored in memory as 2/4/8 consecutive bytes Which is most (least) significant? Can cause problems when exchanging binary data between machines Big Endian Most significant byte has lowest address PowerPC, Sparc Little Endian Least significant byte has lowest address Intel x86

– 18 – CMSC 313, F’09 Byte Ordering Example union { unsigned char c[8]; unsigned short s[4]; unsigned int i[2]; unsigned long l[1]; } dw; c[3] s[1] i[0] c[2]c[1] s[0] c[0]c[7] s[3] i[1] c[6]c[5] s[2] c[4] l[0]

– 19 – CMSC 313, F’09 Byte Ordering Example (Cont). int j; for (j = 0; j < 8; j++) dw.c[j] = 0xf0 + j; printf("Characters 0-7 == [0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x]\n", dw.c[0], dw.c[1], dw.c[2], dw.c[3], dw.c[4], dw.c[5], dw.c[6], dw.c[7]); printf("Shorts 0-3 == [0x%x,0x%x,0x%x,0x%x]\n", dw.s[0], dw.s[1], dw.s[2], dw.s[3]); printf("Ints 0-1 == [0x%x,0x%x]\n", dw.i[0], dw.i[1]); printf("Long 0 == [0x%lx]\n", dw.l[0]);

– 20 – CMSC 313, F’09 Byte Ordering on IA32 Little Endian Characters 0-7 == [0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7] Shorts 0-3 == [0xf1f0,0xf3f2,0xf5f4,0xf7f6] Ints 0-1 == [0xf3f2f1f0,0xf7f6f5f4] Long 0 == [0xf3f2f1f0] Output on IA32: f0f1f2f3f4f5f6f7 c[3] s[1] i[0] LSBMSB c[2]c[1] s[0] c[0] LSBMSB LSBMSB c[7] s[3] i[1] LSBMSB c[6]c[5] s[2] c[4] LSBMSB LSBMSB Print l[0] LSBMSB

– 21 – CMSC 313, F’09 Byte Ordering on Sun Big Endian Characters 0-7 == [0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7] Shorts 0-3 == [0xf0f1,0xf2f3,0xf4f5,0xf6f7] Ints 0-1 == [0xf0f1f2f3,0xf4f5f6f7] Long 0 == [0xf0f1f2f3] Output on Sun: c[3] s[1] i[0] LSBMSB c[2]c[1] s[0] c[0] MSBLSB MSB c[7] s[3] i[1] LSBMSB c[6]c[5] s[2] c[4] MSBLSB MSB f0f1f2f3f4f5f6f7 Print l[0] MSBLSB

– 22 – CMSC 313, F’09 Summary Arrays in C Contiguous allocation of memory Pointer to first element No bounds checkingStructures Allocate bytes in order declared Pad in middle and at end to satisfy alignmentUnions Overlay declarations Way to circumvent type system