Roadmap. Java: Assembly language: OS: Machine code: Computer system:

Similar documents
Structs and Alignment CSE 351 Spring

L14: Structs and Alignment. Structs and Alignment. CSE 351 Spring Instructor: Ruth Anderson

Structs and Alignment

Structs & Alignment. CSE 351 Autumn Instructor: Justin Hsia

Structs and Alignment

Arrays and Structs. CSE 351 Summer Instructor: Justin Hsia. Teaching Assistants: Josie Lee Natalie Andreeva Teagan Horkan.

Assembly IV: Complex Data Types. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

MACHINE-LEVEL PROGRAMMING IV: Computer Organization and Architecture

Assembly IV: Complex Data Types

CS429: Computer Organization and Architecture

Arrays. CSE 351 Autumn Instructor: Justin Hsia

Arrays. CSE 351 Autumn Instructor: Justin Hsia

Java and C CSE 351 Spring

Machine-level Programs Data

Memory, Data, & Addressing I

CSE351: Memory, Data, & Addressing I

CSC 252: Computer Organization Spring 2018: Lecture 9

Java and C I. CSE 351 Spring Instructor: Ruth Anderson

Carnegie Mellon. Bryant and O Hallaron, Computer Systems: A Programmer s Perspective, Third Edition

Computer Organization: A Programmer's Perspective

Java and C. CSE 351 Autumn 2018

Hardware: Logical View

x86-64 Programming III & The Stack

u Arrays One-dimensional Multi-dimensional (nested) Multi-level u Structures Allocation Access Alignment u Floating Point

x86 Programming I CSE 351 Winter

Assembly Programming IV

Machine Level Programming: Arrays, Structures and More

Data III & Integers I

University of Washington

Building an Executable

Executables & Arrays. CSE 351 Autumn Instructor: Justin Hsia

More in-class activities / questions

Data III & Integers I

Data III & Integers I

Memory Allocation I. CSE 351 Autumn Instructor: Justin Hsia

Virtual Memory I. CSE 351 Spring Instructor: Ruth Anderson

Roadmap. Java: Assembly language: OS: Machine code: Computer system:

Assembly IV: Complex Data Types. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

x86 Programming I CSE 351 Autumn 2016 Instructor: Justin Hsia

Basic Data Types. CS429: Computer Organization and Architecture. Array Allocation. Array Access

Machine-Level Programming V: Unions and Memory layout

CS429: Computer Organization and Architecture

Roadmap. Java: Assembly language: OS: Machine code: Computer system:

Cache Example, System Control Flow

We made it! Java: Assembly language: OS: Machine code: Computer system:

Basic Data Types. Lecture 6A Machine-Level Programming IV: Structured Data. Array Allocation. Array Access Basic Principle

Roadmap. Java: Assembly language: OS: Machine code: Computer system:

Java and C II. CSE 351 Spring Instructor: Ruth Anderson

Roadmap. The Interface CSE351 Winter Frac3onal Binary Numbers. Today s Topics. Floa3ng- Point Numbers. What is ?

CS241 Computer Organization Spring Data Alignment

Assembly Programming IV

Computer Systems CSE 410 Autumn Memory Organiza:on and Caches

Machine-Level Programming V: Advanced Topics

Machine-Level Prog. IV - Structured Data

CS 31: Intro to Systems Arrays, Structs, Strings, and Pointers. Kevin Webb Swarthmore College March 1, 2016

Memory Organization and Addressing

x86-64 Programming III

Virtual Memory I. CSE 351 Winter Instructor: Mark Wyse

Memory Allocation I. CSE 351 Autumn Instructor: Justin Hsia

Machine/Assembler Language Putting It All Together

Areas for growth: I love feedback

Caches Spring 2016 May 4: Caches 1

Data Storage. August 9, Indiana University. Geoffrey Brown, Bryce Himebaugh 2015 August 9, / 19

Assembly Language: Function Calls

The Hardware/Software Interface CSE351 Spring 2015

Princeton University Computer Science 217: Introduction to Programming Systems. Assembly Language: Function Calls

Floating Point II, x86 64 Intro

Roadmap. Java: Assembly language: OS: Machine code: Computer system:

University*of*Washington*

Floating Point II, x86 64 Intro

CISC 360 Midterm Exam - Review Alignment

Assembly Programming I

University*of*Washington*

Announcements* Hardware:*Logical*View* Hardware:*SemiVLogical*View* Hardware:*Physical*View*

Computer Systems CEN591(502) Fall 2011

Cache Wrap Up, System Control Flow

x86-64 Programming I CSE 351 Summer 2018 Instructor: Justin Hsia Teaching Assistants: Josie Lee Natalie Andreeva Teagan Horkan

Machine- Level Representation: Data

Data Structures in Memory!

Malloc Lab & Midterm Solutions. Recitation 11: Tuesday: 11/08/2016

x86-64 Assembly CSE 351 Winter 2018 Instructor: Mark Wyse

The Hardware/Software Interface CSE351 Spring 2013 (spring has sprung!)

High Performance Computing in C and C++

CS24: INTRODUCTION TO COMPUTING SYSTEMS. Spring 2017 Lecture 7

How Software Executes

The Hardware/Software Interface CSE351 Spring 2015

C Programming. Course Outline. C Programming. Code: MBD101. Duration: 10 Hours. Prerequisites:

Roadmap. Java: Assembly language: OS: Machine code: Computer system:

Stack Frame Components. Using the Stack (4) Stack Structure. Updated Stack Structure. Caller Frame Arguments 7+ Return Addr Old %rbp

CSE P 501 Exam Sample Solution 12/1/11

Buffer Overflow Attack (AskCypert CLaaS)

Section Notes - Week 1 (9/17)

The Hardware/Software Interface CSE351 Spring 2015

SYSTEMS PROGRAMMING AND COMPUTER ARCHITECTURE Assignment 5: Assembly and C

How Software Executes

Machine Programming. CSE 351 Autumn Instructor: Justin Hsia

The Stack & Procedures

CS367 Test 1 Review Guide

Lecture 5: Outline. I. Multi- dimensional arrays II. Multi- level arrays III. Structures IV. Data alignment V. Linked Lists

The Hardware/Software Interface CSE351 Spring 2015

Transcription:

Roadmap C: car *c = malloc(sizeof(car)); c->miles = 100; c->gals = 17; float mpg = get_mpg(c); free(c); Assembly language: Machine code: Computer system: get_mpg: pushq movq... popq ret %rbp %rsp, %rbp %rbp 0111010000011000 100011010000010000000010 1000100111000010 110000011111101000011111 Java: Car c = new Car(); c.setmiles(100); c.setgals(17); float mpg = c.getmpg(); OS: Memory & data Integers & floats Machine code & C x86 assembly Procedures & stacks Arrays & structs Memory & caches Processes Virtual memory Memory allocation Java vs. C 1

Data Structures in Assembly Arrays One-dimensional Multi-dimensional (nested) Multi-level Structs Alignment Unions 2

Review: Structs in Lab 0 // Use typedef to create a type: FourInts typedef struct { int a, b, c, d; } FourInts; // Name of type is FourInts int main(int argc, char* argv[]) { FourInts f1; // Allocates memory to hold a FourInts // (16 bytes) on stack (local variable) f1.a = 0; // Assign the first field in f1 to be zero FourInts* f2; // Declare f2 as a pointer to a FourInts // Allocate space for a FourInts on the heap, // f2 is a pointer to / address of this space. f2 = (FourInts*)malloc(sizeof(FourInts)); f2->b = 17; // Assign the second field to be 17 } 3

Syntax for structs without typedef struct rec { int a[4]; long i; struct rec *next; // Declares the type struct rec // Total size = bytes }; struct rec r1; // Allocates memory to hold a struct rec // named r1, on stack or globally, // depending on where this code appears struct rec *r; // Allocates memory for a pointer r = &r1; // Initializes r to point to r1 Minor syntax note: Need that semicolon after a struct declaration (easy to forget) 4

Syntax for structs with typedef struct rec { int a[4]; long i; struct rec *next; // Declares the type struct rec // Total size = bytes }; struct rec r1; // Allocates memory to hold a struct rec // named r1, on stack or globally, // depending on where this code appears struct rec *r; // Allocates memory for a pointer r = &r1; // Initializes r to point to r1 typedef struct rec { int a[4]; long i; struct rec *next; } Record; // typedef creates new name for struct rec // (that doesn t need struct in front of it) Record r2; // Declare variable of type Record // (really a struct rec ) 5

More Structs Syntax struct rec { // Declares the type struct rec int a[4]; long i; struct rec *next; }; struct rec r1; // Declares r1 as a struct rec Equivalent to: struct rec { // Declares the type struct rec int a[4]; long i; struct rec *next; } r1; // Declares r1 as a struct rec 6

More Structs Syntax: Pointers struct rec { // Declares the type struct rec int a[4]; long i; struct rec *next; }; struct rec *r; // Declares r as pointer to a struct rec Equivalent to: struct rec { // Declares the type struct rec int a[4]; long i; struct rec *next; } *r; // Declares r as pointer to a struct rec 7

Accessing Structure Members Given an instance of the struct, we can use the. operator: struct rec r1; r1.i = val; struct rec { int a[4]; long i; struct rec *next; }; Given a pointer to a struct: struct rec *r; r = &r1; // or malloc space for r to point to We have two options: Using * and. operators: (*r).i = val; Or, use -> operator for short: r->i = val; The pointer is the address of the first byte of the structure Access members with offsets 8

Java side-note Structs Java: class Record {... } Record x = new Record(); An instance of a class is like a pointer to a struct containing the fields (Ignoring methods and subclassingfor now) So Java s x.f is like C s x->f, i.e., (*x).f In Java, almost everything is a pointer ( reference ) to an object Cannot declare variables or fields that are structs or arrays Always a pointer to a struct or array So every Java variable or field is <= 8 bytes (but can point to lots of data) 9

Structure Representation struct rec { int a[4]; long i; struct rec *next; } *r; r a i next 0 16 24 32 Characteristics Contiguously-allocated region of memory Refer to members within structure by names Members may be of different types 10

Structure Representation struct rec { int a[4]; long i; struct rec *next; } *r; Structure represented as block of memory Big enough to hold all of the fields Fields ordered according to declaration order Even if another ordering could yield a more compact representation Compiler determines overall size + positions of fields r a Machine-level program has no understanding of the structures in the source code i next 0 16 24 32 11

Accessing a Structure Member struct rec { int a[4]; long i; struct rec *next; } *r; r a r->i i next 0 16 24 32 Compiler knows the offset of each member within a struct. Compute as: *(r+offset) long get_i(struct rec *r) { return r->i; } # r in %rdi, index in %rsi movq 16(%rdi), %rax ret 12

Exercise: Generating Pointer to Structure Member struct rec { int a[4]; long i; struct rec *next; } *r; r a i next 0 16 24 32 long* address_of_i(struct rec *r) { return &(r->i); } # r in %rdi ret,%rax struct rec* address_of_next(struct rec *r) { return &(r->next); } # r in %rdi ret,%rax 13

Exercise: Generating Pointer to Structure Member struct rec { int a[4]; long i; struct rec *next; } *r; r a i next 0 16 24 32 long* address_of_i(struct rec *r) { return &(r->i); } # r in %rdi leaq 16(%rdi), %rax ret struct rec* address_of_next(struct rec *r) { return &(r->next); } # r in %rdi leaq 24(%rdi), %rax ret 14

Generating Pointer to Structure Member struct rec { int a[4]; long i; struct rec *next; } *r; r a r + 4*index i next 0 16 24 32 Generating Pointer to Array Element Offset of each structure member determined at compile time Compute as: r + 4*index int* find_address_of_elem (struct rec *r, long index) { return &r->a[index]; } &(r->a[index]) # r in %rdi, index in %rsi leaq (%rdi,%rsi,4), %rax ret 15

Review: Memory Alignment in x86-64 For good memory system performance, Intel recommends data be aligned However the x86-64 hardware will work correctly regardless of alignment of data. Alignedmeans: Any primitive object of K bytes must have an address that is a multiple of K. This means we could expect these types to have starting addresses that are the following multiples: K Type Addresses 1 char No restrictions 2 short Lowest bit must be zero: 0 2 4 int, float Lowest 2 bits zero: 00 2 8 long, double, pointers Lowest 3 bits zero: 000 2 16 long double Lowest 4 bits zero: 0000 2 16

Alignment Principles Aligned Data Primitive data type requires K bytes Address must be multiple of K Required on some machines; advised on x86-64 Motivation for Aligning Data Memory accessed by (aligned) chunks of 4 or 8 bytes (system dependent) Inefficient to load or store value that spans quad word boundaries Virtual memory trickier when value spans 2 pages (more on this later) 17

Structures & Alignment Unaligned Data c i[0] i[1] v p p+1 p+5 p+9 p+17 struct S1 { char c; int i[2]; double v; } *p; Aligned Data Primitive data type requires K bytes Address must be multiple of K c 3 bytes i[0] i[1] 4 bytes v p+0 p+4 p+8 p+16 p+24 Multiple of 4 Multiple of 8 Multiple of 8 Multiple of 8 internal fragmentation 18

Satisfying Alignment with Structures Within structure: Must satisfy each element s alignment requirement Overall structure placement Each structure has alignment requirement K K = Largest alignment of any element Initial address of structure & structure length must be multiples of K Example: K = 8, due to double element c 3 bytes i[0] i[1] 4 bytes v struct S1 { char c; int i[2]; double v; } *p; p+0 p+4 p+8 p+16 p+24 Multiple of 4 Multiple of 8 Multiple of 8 Multiple of 8 internal fragmentation 19

Satisfying Alignment Requirements: Another Example For largest alignment requirement K Overall structure size must be multiple of K Compiler will add padding at end of structure to meet overall structure alignment requirement struct S2 { double v; int i[2]; char c; } *p; v i[0] i[1] c 7 bytes p+0 p+8 p+16 p+24 external fragmentation Multiple of K=8 20

Alignment of Structs Compiler: Maintains declared ordering of fields in struct Each field must be aligned within the struct (may insert padding) offsetof can be used to find the actual offset of a field Overall struct must be aligned according to largest field Total struct size must be multiple of its alignment (may insert padding) sizeof should be used to get true size of structs 21

Arrays of Structures Overall structure length multiple of K Satisfy alignment requirement for every element in array struct S2 { double v; int i[2]; char c; } a[10]; Create an array of ten S2 structs called a a[0] a[1] a[2] a+0 a+24 a+48 a+72 v i[0] i[1] c 7 bytes a+24 a+32 a+40 a+48 external fragmentation 22

Accessing Array Elements Compute start of array element as: 12*index sizeof(s3) = 12, including alignment padding Element j is at offset 8 within structure Assembler gives offset a+8 struct S3 { short i; float v; short j; } a[10]; a[0] a[index] a+0 a+12 a+12*index i 2 bytes v j 2 bytes a+12*index short get_j(int index) { return a[index].j; } a+ 12*index +8 # %rdi = index leaq (%rdi,%rdi,2),%rax # 3*index movzwl a+8(,%rax,4),%eax 23

How the Programmer Can Save Space Compiler must respect order elements are declared in Sometimes the programmer can save space by declaring large data types first struct S4 { char c; int i; char d; } *p; struct S5 { int i; char c; char d; } *p; c 3 bytes i d 3 bytes i c d 2 bytes 12 bytes 8 bytes 24

Unions Only allocates enough space for the largest element in union Can only use one member at a time union U { char c; int i[2]; double v; } *up; c i[0] v i[1] struct S { char c; int i[2]; double v; } *sp; up+0 up+4 up+8 c 3 bytes i[0] i[1] 4 bytes v sp+0 sp+4 sp+8 sp+16 sp+24 25

What Are Unions Good For? Unions allow the same region of memory to be referenced as different types Different views of the same memory location Can be used to circumvent C s type system (bad idea and technically not guaranteed to work) Better idea: use a struct inside a union to access some memory location either as a whole or by its parts But watch out for endianness at a small scale Layout details are implementation/machine-specific union int_or_bytes { int i; struct bytes { char b0, b1, b2, b3; } } 26

Unions For Embedded Programming typedef union { unsigned char byte; struct { unsigned char reserved:4; unsigned char b3:1; unsigned char b2:1; unsigned char b1:1; unsigned char b0:1; } bits; } hw_register; (Note: the placement of these fields and other parts of this example are implementationdependent) hw_register reg; reg.byte = 0x3F; // 00111111 2 reg.bits.b2 = 0; // 00111011 2 reg.bits.b3 = 0; // 00110011 2 unsigned short a = reg.byte; printf("0x%x\n", a); // output: 0x33 27

Summary Arrays in C Contiguous allocations of memory No bounds checking Can usually be treated like a pointer to first element Aligned to satisfy every element s alignment requirement Structures Allocate bytes in order declared Pad in middle and at end to satisfy alignment Unions Provide different views of the same memory location 28