Merge-sorting with the system stack as temporary storage
|
|
- Iris O’Brien’
- 6 years ago
- Views:
Transcription
1 Merge-sorting with the system stack as temporary storage M.H. van Emden Abstract Logic programming not only interprets positive Horn clauses as procedures, but also dictates the use of Prolog as the procedural programming language. We are interested in the possibility of expressing algorithms in Horn clauses, but selecting a procedural language other than Prolog. As example we use merge sort and develop C and C++ programs on the basis of the Horn clause version of merge sort. This may be more than an academic exercise. In the resulting code all auxiliary storage is in arrays local to recursive calls, so that their allocation and de-allocation happens automatically and eciently. 1 Introduction Merge-sorting was rst describing Mauchly in That makes it the oldest algorithm that is specic to computers as we understand them today. The idea of merge sort, stripped of all the complications necessary in other programming language, is most succinctly expressed in Prolog: 1 mrgsrt(v, W) :- 2 ( ((V = []; V = [X]) -> V = W) 3 ; ( split(v, V0, V1), 4 mrgsrt(v0, W0), mrgsrt(v1, W1), 5 merge(w0, W1, W) 6 ) 7 ). The following commentary explains. 1 To sort list V into list W 2 if V has at most one element, then copy V to W else 3 split V into V0 and V1 4 sort V0 into W0, sort V1 into W1 5 merge W0 and W1 into W 6 return W0 and W1 are temporarily needed storage. In Prolog the programmer does not need to allocate lists and cannot deallocate them; that is the task of the garbage collection system. This is just as well, because the recursive calls to sort need their own temporary storage so that a considerable number of temporary lists is created. The simplicity of the Prolog program can be reproduced in C++ with vectors from the standard library. W0 and W1 can be local to the recursive calls and are deallocated whenever a call, usually a recursive one, is exited. Still, even with the most sophisticated management system, use of the heap causes fragmentation, and fragmentation may occasionally have to be eliminated by reorganization. This suggests the use of arrays, were it not for the fact that C++ disallows dynamic arrays. We therefore switch to C. 1
2 2 Merge sorting arrays in C First we package arrays into vectors, a type named vec. See le merge.h: #include<stdio.h> typedef char T; typedef struct{ T* a; // pointer to first of array segment of length n int n; // length of the array vec; vec mkvec(t* a, int n); // Purpose: make vec from array a of length n. T* ndx(vec* v, int i); // Purpose: return pointer to the i-th element of v // Precondition: i within range of v. void copyvec(vec* v, vec* w); void printvec(vec* v); void merge(vec* in0, vec* in1, vec* out); The implementation is in merge.c: #include"merge.h" vec mkvec(t* a, int n) { // Purpose: make vec from array a of length n. vec v; v.a = a; v.n = n; return v; T* ndx(vec* v, int i) { return v->a + i; void copyvec(vec* v, vec* w) { for(int i=0; i < v->n; ++i) *ndx(w, i) = *ndx(v, i); void printvec(vec* v) { for (int i=0; i < v->n; ++i) printf("%c ", *((v->a)+i)); printf("\n"); void merge(vec* in0, vec* in1, vec* out) { int n0 = -1 + in0 -> n; int n1 = -1 + in1 -> n; int n = -1 + out -> n; while (n0 >= 0 && n1 >= 0) { if (*ndx(in0, n0) > *ndx(in1, n1)) { *ndx(out, n) = *ndx(in0, n0); --n0; else { *ndx(out, n) = *ndx(in1, n1); --n1; while (n0 >= 0) { *ndx(out, n) = *ndx(in0, n0); --n0; while (n1 >= 0) { *ndx(out, n) = *ndx(in1, n1); --n1; Now that vectors, their merging, and sundry auxiliary functions are taken care of, we can proceed to merge sort itself. File mrgsrt.h: #include"merge.h" void mrgsrt(vec* v, vec* w); The implementation is: 1 #include"mrgsrt.h" 2 3 void mrgsrt(vec* v, vec* w) { 2
3 4 if (v -> n <= 1) { copyvec(v, w); return; 5 int lenv = v -> n; 6 int len0 = lenv/2, len1 = lenv - len0; 7 vec v0 = mkvec(v->a, len0); 8 vec v1 = mkvec(v->a + len0, len1); 9 T a0[len0], a1[len1]; 10 vec w0 = mkvec(a0, len0); 11 vec w1 = mkvec(a1, len1); 12 mrgsrt(&v0, &w0); mrgsrt(&v1, &w1); 13 merge(&w0, &w1, w); 14 What is the basis of my claim that this is a transcription of the Prolog program? It is based on the following correspondence. Line 2 in Prolog corresponds to line 4 in C. Line 3 in Prolog splits the input list into two lists. This is done by a recursive Prolog program the way one would split a linked list. In C we take the opportunity of using arrays that allow splitting without traversing the input. In C the splitting is not encapsulated in a function; it happens in lines 5 { 8. The arrays are created in line 9. They are local to mrgsrt. Their lifetime is that of each recursive invocation of that function. They are allocated in line 9 and de-allocated on exit. Line 4 in Prolog corresponds to line 12 in C. Line 5 in Prolog corresponds to line 13 in C. For sorting an array of length n, the extra storage allocated is at most about (1 + 1=2 + 1=4 + 1=8 + )n; that is, at most about 2n for large n. Thus if amount of memory is a constraint, this algorithm is not an option. The advantage lies in the eciency of the allocation and de-allocation and the simplicity of the algorithm. Postscript Paul McJones was so kind to investigate whether the extra storage can be reduced to the minimum required for merge-sorting, namely n=2. He showed that this can be done by introducing a buer of this size once and to pass it to the recursive calls via an additional parameter. An example of this technique is: #include"mrgsrt.h" void mrgsrt1(vec* v, vec* w, vec* buf) { if (v -> n <= 1) { copyvec(v, w); return; int lenv = v -> n; int len0 = lenv/2, len1 = lenv - len0; vec v0 = mkvec(v->a, len0); vec v1 = mkvec(v->a + len0, len1); // input vector split vec w0 = mkvec(w->a, len0); vec w1 = mkvec(w->a + len0, len1); // output vector split vec u = mkvec(buf->a, len1); // segment of buffer; const length struct is local mrgsrt1(&v0, &w0, &w1); mrgsrt1(&v1, &u, &w1); merge(&w0, &u, &w1); void mrgsrt(vec* v, vec* w) { int lenbuf = (v -> n) - (v -> n)/2; T a[lenbuf]; // allocation for buffer done once vec buf = mkvec(a, lenbuf); mrgsrt1(v, w, &buf); Each recursive invocation allocates storage for ve structs. This takes a constant amount of storage and happens up to log n times. To speed up algorithms like quicksort and merge sort one can use a simpler algorithm such as selection sort for segments of length less than, say, 32. This would reduce the storage overhead for local structs by ve. 3
4 3 Merge sorting arrays in C++ Once one is used to C++ it hurts to have to invoke constructors explicitly. Fortunately compiler writers do not see any reason for disallowing dynamic arrays in C++. So if one is willing to brave some warnings, one can ignore the ban. 1 #include<iostream> 2 using namespace std; 3 4 typedef char T; 5 typedef unsigned nat; // natural number 6 7 class Seg { // segment of an array 8 public: 9 T* bgn; nat n; 10 Seg() { 11 Seg(T* bgn, nat n): bgn(bgn), n(n) { 12 void copy(seg& w) { 13 for (nat i=0; i<n; ++i) *(bgn+i) = *((w.bgn)+i); void print() { 16 for (nat i=0; i<n; ++i) cout << *(bgn+i) << " "; 17 cout << "\n"; ; 20 void merge(seg& w0, Seg& w1, Seg& w) { 21 int n0 = -1 + w0.n; int n1 = -1 + w1.n; 22 int n = -1 + w.n; 23 while (n0 >= 0 && n1 >= 0) { 24 if (*((w0.bgn)+n0) > *((w1.bgn)+n1)) { 25 *((w.bgn)+n) = *((w0.bgn)+n0); --n0; 26 else { 27 *((w.bgn)+n) = *((w1.bgn)+n1); --n1; while (n0 >= 0) { 32 *((w.bgn)+n) = *((w0.bgn)+n0); --n0; while (n1 >= 0) { 35 *((w.bgn)+n) = *((w1.bgn)+n1); --n1; void split(seg& v, Seg& v0, Seg& v1) { 39 nat n0 = (v.n)/2, n1 = (v.n) - (v.n)/2; 40 v0.bgn = v.bgn; v0.n = n0; 41 v1.bgn = v.bgn+n0; v1.n = n1; void sort(seg& v, Seg& w) { 44 if ((v.n) <= 1) { w.copy(v); return; 45 // sort([], []) and sort([x], [x]) 46 Seg v0, v1; split(v, v0, v1); 47 // split(v, v0, v1) 48 T a[v0.n], b[v1.n]; 49 Seg w0(a, v0.n), w1(b, v1.n); 50 // local storage 51 sort(v0, w0); sort(v1, w1); 52 // sort(v0, w0), sort(v1, w1) 53 merge(w0, w1, w); 54 // merge(w0, w1, w) int main() { 57 T a[] = "thequickbrownfxjmpsvlazydg"; 58 Seg v(a, -1+sizeof(a)/sizeof(a[0])); 59 T b[] = "xxxxxxxxxxxxxxxxxxxxxxxxxx"; 60 Seg w(b, -1+sizeof(b)/sizeof(b[0])); 61 sort(v, w); 62 w.print(); 63 In lines 43 through 55 the sort function is commented by the successive lines of the corresponding Prolog program. Note that occasionally a close match is obtained. 4
5 4 Conclusions The most succinct and elegant formulation of merge sort can be found in Prolog. In addition, the Prolog code suggests that the temporary storage needed by merge sort be made local to the recursive calls. However, it seems that this locality is not exploited by Prolog implementations. The suggestion by Prolog that temporary storage be made local is a welcome simplication for merge sort, and a novel suggestion as far as the author is concerned. We present an implementation in C that follows Prolog as closely as possible. C++ allows code to follow Prolog more closely, provided one is willing to sacrice portability by using the nonstandard dynamic arrays provided by the GNU C++ compiler. 5
Run Time Environment
CS 403 Compiler Construction Lecture 12 Run Time Environment and Management [Based on Chapter 7 of Aho2] 1 Run Time Environment From Lecture 1 to 11, we have seen many jobs that are done by a compiler.
More informationShort Notes of CS201
#includes: Short Notes of CS201 The #include directive instructs the preprocessor to read and include a file into a source code file. The file name is typically enclosed with < and > if the file is a system
More informationCS201 - Introduction to Programming Glossary By
CS201 - Introduction to Programming Glossary By #include : The #include directive instructs the preprocessor to read and include a file into a source code file. The file name is typically enclosed with
More informationExercise 1.1 Hello world
Exercise 1.1 Hello world The goal of this exercise is to verify that computer and compiler setup are functioning correctly. To verify that your setup runs fine, compile and run the hello world example
More informationWeek 8: Operator overloading
Due to various disruptions, we did not get through all the material in the slides below. CS319: Scientific Computing (with C++) Week 8: Operator overloading 1 The copy constructor 2 Operator Overloading
More informationCSE030 Fall 2012 Final Exam Friday, December 14, PM
CSE030 Fall 2012 Final Exam Friday, December 14, 2012 3-6PM Write your name here and at the top of each page! Name: Select your lab session: Tuesdays Thursdays Paper. If you have any questions or need
More informationProgramming Languages
Programming Languages Tevfik Koşar Lecture - VIII February 9 th, 2006 1 Roadmap Allocation techniques Static Allocation Stack-based Allocation Heap-based Allocation Scope Rules Static Scopes Dynamic Scopes
More informationIII. Classes (Chap. 3)
III. Classes III-1 III. Classes (Chap. 3) As we have seen, C++ data types can be classified as: Fundamental (or simple or scalar): A data object of one of these types is a single object. int, double, char,
More informationCE221 Programming in C++ Part 2 References and Pointers, Arrays and Strings
CE221 Programming in C++ Part 2 References and Pointers, Arrays and Strings 19/10/2017 CE221 Part 2 1 Variables and References 1 In Java a variable of primitive type is associated with a memory location
More informationLecture Notes on Queues
Lecture Notes on Queues 15-122: Principles of Imperative Computation Frank Pfenning Lecture 9 September 25, 2012 1 Introduction In this lecture we introduce queues as a data structure and linked lists
More informationWeeks 6&7: Procedures and Parameter Passing
CS320 Principles of Programming Languages Weeks 6&7: Procedures and Parameter Passing Jingke Li Portland State University Fall 2017 PSU CS320 Fall 17 Weeks 6&7: Procedures and Parameter Passing 1 / 45
More informationA506 / C201 Computer Programming II Placement Exam Sample Questions. For each of the following, choose the most appropriate answer (2pts each).
A506 / C201 Computer Programming II Placement Exam Sample Questions For each of the following, choose the most appropriate answer (2pts each). 1. Which of the following functions is causing a temporary
More informationVector and Free Store (Vectors and Arrays)
DM560 Introduction to Programming in C++ Vector and Free Store (Vectors and Arrays) Marco Chiarandini Department of Mathematics & Computer Science University of Southern Denmark [Based on slides by Bjarne
More informationCSCI 171 Chapter Outlines
Contents CSCI 171 Chapter 1 Overview... 2 CSCI 171 Chapter 2 Programming Components... 3 CSCI 171 Chapter 3 (Sections 1 4) Selection Structures... 5 CSCI 171 Chapter 3 (Sections 5 & 6) Iteration Structures
More informationA brief introduction to C programming for Java programmers
A brief introduction to C programming for Java programmers Sven Gestegård Robertz September 2017 There are many similarities between Java and C. The syntax in Java is basically
More informationB-Trees. nodes with many children a type node a class for B-trees. an elaborate example the insertion algorithm removing elements
B-Trees 1 B-Trees nodes with many children a type node a class for B-trees 2 manipulating a B-tree an elaborate example the insertion algorithm removing elements MCS 360 Lecture 35 Introduction to Data
More informationG Programming Languages - Fall 2012
G22.2110-003 Programming Languages - Fall 2012 Lecture 2 Thomas Wies New York University Review Last week Programming Languages Overview Syntax and Semantics Grammars and Regular Expressions High-level
More informationCPSC 427: Object-Oriented Programming
CPSC 427: Object-Oriented Programming Michael J. Fischer Lecture 7 September 21, 2016 CPSC 427, Lecture 7 1/21 Brackets Example (continued) Storage Management CPSC 427, Lecture 7 2/21 Brackets Example
More informationSorting L7.2 Recall linear search for an element in an array, which is O(n). The divide-and-conquer technique of binary search divides the array in ha
Lecture Notes on Sorting 15-122: Principles of Imperative Computation Frank Pfenning Lecture 7 February 1, 2011 1 Introduction We have seen in the last lecture that sorted arrays drastically reduce the
More informationCSC 222: Computer Programming II. Spring 2004
CSC 222: Computer Programming II Spring 2004 Stacks and recursion stack ADT push, pop, top, empty, size vector-based implementation, library application: parenthesis/delimiter matching run-time
More informationCSCI-243 Exam 1 Review February 22, 2015 Presented by the RIT Computer Science Community
CSCI-243 Exam 1 Review February 22, 2015 Presented by the RIT Computer Science Community http://csc.cs.rit.edu History and Evolution of Programming Languages 1. Explain the relationship between machine
More informationCSCI-UA /2. Computer Systems Organization Lecture 19: Dynamic Memory Allocation: Basics
Slides adapted (and slightly modified) from: Clark Barrett Jinyang Li Randy Bryant Dave O Hallaron CSCI-UA.0201-001/2 Computer Systems Organization Lecture 19: Dynamic Memory Allocation: Basics Mohamed
More informationC11: Garbage Collection and Constructors
CISC 3120 C11: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 10/5/2017 CUNY Brooklyn College 1 Outline Recap Project progress and lessons
More informationLecture 10 Notes Linked Lists
Lecture 10 Notes Linked Lists 15-122: Principles of Imperative Computation (Summer 1 2015) Frank Pfenning, Rob Simmons, André Platzer 1 Introduction In this lecture we discuss the use of linked lists to
More informationCS103L SPRING 2017 UNIT 8: RECURSION
CS103L SPRING 2017 UNIT 8: RECURSION RECURSION A recursion function is defined in terms of itself Applies to math, e.g. recursion relations, sequences Fibonacci: F 0 = 1, F 1 = 1, F n = F n-1 + F n-2 Applies
More information15-122: Principles of Imperative Computation, Spring Due: Thursday, March 10, 2016 by 22:00
15-122 Programming 7 Page 1 of 8 15-122: Principles of Imperative Computation, Spring 2016 Programming homework 7: Text Buers Due: Thursday, March 10, 2016 by 22:00 For the programming portion of this
More informationToday USING POINTERS. Functions: parameters and arguments. Todaywewilllookattopicsrelatingtotheuseofpointers
Today Todaywewilllookattopicsrelatingtotheuseofpointers USING POINTERS Callbyvalue Call by reference Copy constructors Dynamic memory allocation Thelastoftheseisn tdirectlytodowithpointers,butweneedto
More informationClass Information ANNOUCEMENTS
Class Information ANNOUCEMENTS Third homework due TODAY at 11:59pm. Extension? First project has been posted, due Monday October 23, 11:59pm. Midterm exam: Friday, October 27, in class. Don t forget to
More informationArrays. Returning arrays Pointers Dynamic arrays Smart pointers Vectors
Arrays Returning arrays Pointers Dynamic arrays Smart pointers Vectors To declare an array specify the type, its name, and its size in []s int arr1[10]; //or int arr2[] = {1,2,3,4,5,6,7,8}; arr2 has 8
More information04-17 Discussion Notes
04-17 Discussion Notes PIC 10B Spring 2018 1 RAII RAII is an acronym for the idiom Resource Acquisition is Initialization. What is meant by resource acquisition is initialization is that a resource should
More informationCS558 Programming Languages
CS558 Programming Languages Fall 2016 Lecture 4a Andrew Tolmach Portland State University 1994-2016 Pragmatics of Large Values Real machines are very efficient at handling word-size chunks of data (e.g.
More informationIntroduction to C. Robert Escriva. Cornell CS 4411, August 30, Geared toward programmers
Introduction to C Geared toward programmers Robert Escriva Slide heritage: Alin Dobra Niranjan Nagarajan Owen Arden Cornell CS 4411, August 30, 2010 1 Why C? 2 A Quick Example 3 Programmer s Responsibilities
More informationUnified Modeling Language a case study
Unified Modeling Language a case study 1 an online phone book use case diagram encapsulating a file 2 Command Line Arguments arguments of main arrays of strings 3 Class Definition the filesphonebook.h
More informationFORM 2 (Please put your name and form # on the scantron!!!!) CS 161 Exam II:
FORM 2 (Please put your name and form # on the scantron!!!!) CS 161 Exam II: True (A)/False(B) (2 pts each): 1. The declaration below declares three pointer variables of type pointer to double that is
More informationLecture 10 Notes Linked Lists
Lecture 10 Notes Linked Lists 15-122: Principles of Imperative Computation (Spring 2016) Frank Pfenning, Rob Simmons, André Platzer 1 Introduction In this lecture we discuss the use of linked lists to
More informationSee the CS 2704 notes on C++ Class Basics for more details and examples. Data Structures & OO Development I
Polynomial Class Polynomial(); Polynomial(const string& N, const vector& C); Polynomial operator+(const Polynomial& RHS) const; Polynomial operator-(const Polynomial& RHS) const; Polynomial operator*(const
More informationLinked List using a Sentinel
Linked List using a Sentinel Linked List.h / Linked List.h Using a sentinel for search Created by Enoch Hwang on 2/1/10. Copyright 2010 La Sierra University. All rights reserved. / #include
More informationC++ Addendum: Inheritance of Special Member Functions. Constructors Destructor Construction and Destruction Order Assignment Operator
C++ Addendum: Inheritance of Special Member Functions Constructors Destructor Construction and Destruction Order Assignment Operator What s s Not Inherited? The following methods are not inherited: Constructors
More informationLecture Notes on Quicksort
Lecture Notes on Quicksort 15-122: Principles of Imperative Computation Frank Pfenning Lecture 8 September 20, 2012 1 Introduction In this lecture we first sketch two related algorithms for sorting that
More informationCPSC 427: Object-Oriented Programming
CPSC 427: Object-Oriented Programming Michael J. Fischer Lecture 10 October 1, 2018 CPSC 427, Lecture 10, October 1, 2018 1/20 Brackets Example (continued from lecture 8) Stack class Brackets class Main
More informationArrays and Pointers.
Arrays and Pointers pm_jat@daiict.ac.in What is an array? First element a 15 8 107 311 187-20 152 11 38 87 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] Name of array Array index Array Declaration
More informationMotivation was to facilitate development of systems software, especially OS development.
A History Lesson C Basics 1 Development of language by Dennis Ritchie at Bell Labs culminated in the C language in 1972. Motivation was to facilitate development of systems software, especially OS development.
More informationLow-Level C Programming. Memory map Pointers Arrays Structures
Low-Level C Programming Memory map Pointers Arrays Structures Memory Map 0x7FFF_FFFF Binaries load at 0x20000 by default Stack start set by binary when started Stack grows downwards You will need one stack
More informationCSE 333 Autumn 2013 Midterm
CSE 333 Autumn 2013 Midterm Please do not read beyond this cover page until told to start. A question involving what could be either C or C++ is about C, unless it explicitly states that it is about C++.
More informationLecture 23: Object Lifetime and Garbage Collection
The University of North Carolina at Chapel Hill Spring 2002 Lecture 23: Object Lifetime and Garbage Collection March 18 1 Fundamental Concepts in OOP Encapsulation Data Abstraction Information hiding The
More informationDynamic Memory: Alignment and Fragmentation
Dynamic Memory: Alignment and Fragmentation Learning Objectives Explain the purpose of dynamic memory Define the terms arena, heap Identify common errors involving dynamic memory Explain how dynamic memory
More informationCS61C : Machine Structures
inst.eecs.berkeley.edu/~cs61c/su06 CS61C : Machine Structures Lecture #6: Memory Management CS 61C L06 Memory Management (1) 2006-07-05 Andy Carle Memory Management (1/2) Variable declaration allocates
More informationOperator overloading
1 Introduction 2 The copy constructor 3 Operator Overloading 4 Eg 1: Adding two vectors 5 The -> operator 6 The this pointer 7 Overloading = 8 Unary operators 9 Overloading for the matrix class 10 The
More informationLecture 8 Dynamic Memory Allocation
Lecture 8 Dynamic Memory Allocation CS240 1 Memory Computer programs manipulate an abstraction of the computer s memory subsystem Memory: on the hardware side 3 @ http://computer.howstuffworks.com/computer-memory.htm/printable
More informationENERGY 211 / CME 211. Functions
ENERGY 211 / CME 211 Lecture 8 October 8, 2008 1 Functions So far, we have seen programs in which all code resides within a main function Complex programs consist of subprograms that perform particular
More information6. Pointers, Structs, and Arrays. March 14 & 15, 2011
March 14 & 15, 2011 Einführung in die Programmierung Introduction to C/C++, Tobias Weinzierl page 1 of 47 Outline Recapitulation Pointers Dynamic Memory Allocation Structs Arrays Bubble Sort Strings Einführung
More informationCSE 307: Principles of Programming Languages
1 / 26 CSE 307: Principles of Programming Languages Names, Scopes, and Bindings R. Sekar 2 / 26 Topics Bindings 1. Bindings Bindings: Names and Attributes Names are a fundamental abstraction in languages
More informationCE221 Programming in C++ Part 1 Introduction
CE221 Programming in C++ Part 1 Introduction 06/10/2017 CE221 Part 1 1 Module Schedule There are two lectures (Monday 13.00-13.50 and Tuesday 11.00-11.50) each week in the autumn term, and a 2-hour lab
More informationC and C++ 7. Exceptions Templates. Alan Mycroft
C and C++ 7. Exceptions Templates Alan Mycroft University of Cambridge (heavily based on previous years notes thanks to Alastair Beresford and Andrew Moore) Michaelmas Term 2013 2014 1 / 20 Exceptions
More informationDynamic Data Structures. CSCI 112: Programming in C
Dynamic Data Structures CSCI 112: Programming in C 1 It s all about flexibility In the programs we ve made so far, the compiler knows at compile time exactly how much memory to allocate for each variable
More informationRecharge (int, int, int); //constructor declared void disply();
Constructor and destructors in C++ Constructor Constructor is a special member function of the class which is invoked automatically when new object is created. The purpose of constructor is to initialize
More informationCSE 333 Lecture smart pointers
CSE 333 Lecture 14 -- smart pointers Hal Perkins Paul G. Allen School of Computer Science & Engineering University of Washington Administrivia New exercise out today, due Wednesday morning Exam Friday
More informationCalling Conventions. Hakim Weatherspoon CS 3410, Spring 2012 Computer Science Cornell University. See P&H 2.8 and 2.12
Calling Conventions Hakim Weatherspoon CS 3410, Spring 2012 Computer Science Cornell University See P&H 2.8 and 2.12 Goals for Today Calling Convention for Procedure Calls Enable code to be reused by allowing
More informationCS 137 Part 8. Merge Sort, Quick Sort, Binary Search. November 20th, 2017
CS 137 Part 8 Merge Sort, Quick Sort, Binary Search November 20th, 2017 This Week We re going to see two more complicated sorting algorithms that will be our first introduction to O(n log n) sorting algorithms.
More informationBinding and Storage. COMP 524: Programming Language Concepts Björn B. Brandenburg. The University of North Carolina at Chapel Hill
Binding and Storage Björn B. Brandenburg The University of North Carolina at Chapel Hill Based in part on slides and notes by S. Olivier, A. Block, N. Fisher, F. Hernandez-Campos, and D. Stotts. What s
More informationProgramming Languages Third Edition. Chapter 7 Basic Semantics
Programming Languages Third Edition Chapter 7 Basic Semantics Objectives Understand attributes, binding, and semantic functions Understand declarations, blocks, and scope Learn how to construct a symbol
More informationAbout this exam review
Final Exam Review About this exam review I ve prepared an outline of the material covered in class May not be totally complete! Exam may ask about things that were covered in class but not in this review
More informationCS24 Week 3 Lecture 1
CS24 Week 3 Lecture 1 Kyle Dewey Overview Some minor C++ points ADT Review Object-oriented Programming C++ Classes Constructors Destructors More minor Points (if time) Key Minor Points const Motivation
More informationChapter 13. Recursion. Copyright 2016 Pearson, Inc. All rights reserved.
Chapter 13 Recursion Copyright 2016 Pearson, Inc. All rights reserved. Learning Objectives Recursive void Functions Tracing recursive calls Infinite recursion, overflows Recursive Functions that Return
More informationRun-time Environments
Run-time Environments Status We have so far covered the front-end phases Lexical analysis Parsing Semantic analysis Next come the back-end phases Code generation Optimization Register allocation Instruction
More informationCh. 11: References & the Copy-Constructor. - continued -
Ch. 11: References & the Copy-Constructor - continued - const references When a reference is made const, it means that the object it refers cannot be changed through that reference - it may be changed
More informationGoal of lecture. Object-oriented Programming. Context of discussion. Message of lecture
Goal of lecture Object-oriented Programming Understand inadequacies of class languages like Ur- Java Extend Ur-Java so it becomes an object-oriented language Implementation in SaM heap allocation of objects
More informationCOMP26120: Linked List in C (2018/19) Lucas Cordeiro
COMP26120: Linked List in C (2018/19) Lucas Cordeiro lucas.cordeiro@manchester.ac.uk Linked List Lucas Cordeiro (Formal Methods Group) lucas.cordeiro@manchester.ac.uk Office: 2.28 Office hours: 10-11 Tuesday,
More informationRun-time Environments
Run-time Environments Status We have so far covered the front-end phases Lexical analysis Parsing Semantic analysis Next come the back-end phases Code generation Optimization Register allocation Instruction
More informationBasic memory model Using functions Writing functions. Basics Prototypes Parameters Return types Functions and memory Names and namespaces
Basic memory model Using functions Writing functions Basics Prototypes Parameters Return types Functions and memory Names and namespaces When a program runs it requires main memory (RAM) space for Program
More informationCommon Misunderstandings from Exam 1 Material
Common Misunderstandings from Exam 1 Material Kyle Dewey Stack and Heap Allocation with Pointers char c = c ; char* p1 = malloc(sizeof(char)); char** p2 = &p1; Where is c allocated? Where is p1 itself
More informationCS11001/CS11002 Programming and Data Structures (PDS) (Theory: 3-1-0)
CS11001/CS11002 Programming and Data Structures (PDS) (Theory: 3-1-0) Dynamic Memory Allocation All variables, arrays, structures and unions that we worked with so far are statically allocated, meaning
More informationCS558 Programming Languages Winter 2018 Lecture 4a. Andrew Tolmach Portland State University
CS558 Programming Languages Winter 2018 Lecture 4a Andrew Tolmach Portland State University 1994-2018 Pragmatics of Large Values Real machines are very efficient at handling word-size chunks of data (e.g.
More informationPointers, Dynamic Data, and Reference Types
Pointers, Dynamic Data, and Reference Types Review on Pointers Reference Variables Dynamic Memory Allocation The new operator The delete operator Dynamic Memory Allocation for Arrays 1 C++ Data Types simple
More informationCS201 Some Important Definitions
CS201 Some Important Definitions For Viva Preparation 1. What is a program? A program is a precise sequence of steps to solve a particular problem. 2. What is a class? We write a C++ program using data
More informationSolution for Data Structure
Solution for Data Structure May 2016 INDEX Q1 a 2-3 b 4 c. 4-6 d 7 Q2- a 8-12 b 12-14 Q3 a 15-18 b 18-22 Q4- a 22-35 B..N.A Q5 a 36-38 b N.A Q6- a 39-42 b 43 1 www.brainheaters.in Q1) Ans: (a) Define ADT
More informationLecture 7 Quicksort : Principles of Imperative Computation (Spring 2018) Frank Pfenning
Lecture 7 Quicksort 15-122: Principles of Imperative Computation (Spring 2018) Frank Pfenning In this lecture we consider two related algorithms for sorting that achieve a much better running time than
More informationIntroduction to C. Sean Ogden. Cornell CS 4411, August 30, Geared toward programmers
Introduction to C Geared toward programmers Sean Ogden Slide heritage: Alin Dobra Niranjan Nagarajan Owen Arden Robert Escriva Zhiyuan Teo Ayush Dubey Cornell CS 4411, August 30, 2013 Administrative Information
More information6. Pointers, Structs, and Arrays. 1. Juli 2011
1. Juli 2011 Einführung in die Programmierung Introduction to C/C++, Tobias Weinzierl page 1 of 50 Outline Recapitulation Pointers Dynamic Memory Allocation Structs Arrays Bubble Sort Strings Einführung
More informationOPENMP IN AN ACCELERATED WORLD. James Beyer, November 2017
OPENMP IN AN ACCELERATED WORLD James Beyer, November 2017 OPENMP ON ACCELERATORS? Why? The top 16 machines on the Green 500 use an accelerator! 1 Exascale subcommittee report 2 challenges Reducing Power
More informationExample. program sort; var a : array[0..10] of integer; procedure readarray; : function partition (y, z :integer) :integer; var i, j,x, v :integer; :
Runtime Environment Relationship between names and data objects (of target machine) Allocation & de-allocation is managed by run time support package Each execution of a procedure is an activation of the
More informationC10: Garbage Collection and Constructors
CISC 3120 C10: Garbage Collection and Constructors Hui Chen Department of Computer & Information Science CUNY Brooklyn College 3/5/2018 CUNY Brooklyn College 1 Outline Recap OOP in Java: composition &
More informationThreads. Threads (continued)
Threads A thread is an alternative model of program execution A process creates a thread through a system call Thread operates within process context Use of threads effectively splits the process state
More informationLecture Notes on Quicksort
Lecture Notes on Quicksort 15-122: Principles of Imperative Computation Frank Pfenning Lecture 8 February 5, 2015 1 Introduction In this lecture we consider two related algorithms for sorting that achieve
More informationClasses: Member functions // classes example #include <iostream> using namespace std; Objects : Reminder. Member functions: Methods.
Classes: Methods, Constructors, Destructors and Assignment For : COP 3330. Object oriented Programming (Using C++) http://www.compgeom.com/~piyush/teach/3330 Piyush Kumar Classes: Member functions // classes
More informationLecture 15a Persistent Memory & Shared Pointers
Lecture 15a Persistent Memory & Shared Pointers Dec. 5 th, 2017 Jack Applin, Guest Lecturer 2017-12-04 CS253 Fall 2017 Jack Applin & Bruce Draper 1 Announcements PA9 is due today Recitation : extra help
More information"apple" "grape" "grape" "grape" "apple"
Test 1: CPS 100 Owen Astrachan and Dee Ramm February 21, 1997 Name: Honor code acknowledgment (signature) Problem 1 Problem 2 Problem 3 Problem 4 Problem 5 Problem 6 TOTAL: value 10 pts. 9 pts. 21 pts.
More informationIntroducing C++ to Java Programmers
Introducing C++ to Java Programmers by Kip Irvine updated 2/27/2003 1 Philosophy of C++ Bjarne Stroustrup invented C++ in the early 1980's at Bell Laboratories First called "C with classes" Design Goals:
More informationQuiz 0 Review Session. October 13th, 2014
Quiz 0 Review Session October 13th, 2014 Topics (non-exhaustive) Binary. ASCII. Algorithms. Pseudocode. Source code. Compiler. Object code. Scratch. Statements. Boolean expressions. Conditions. Loops.
More informationCompiler construction 2009
Compiler construction 2009 Lecture 6 Some project extensions. Pointers and heap allocation. Object-oriented languages. Module systems. Memory structure Javalette restrictions Only local variables and parameters
More informationStarting Savitch Chapter 10. A class is a data type whose variables are objects. Some pre-defined classes in C++ include int,
Classes Starting Savitch Chapter 10 l l A class is a data type whose variables are objects Some pre-defined classes in C++ include int, char, ifstream Of course, you can define your own classes too A class
More informationChapter 18 Vectors and Arrays [and more on pointers (nmm) ] Bjarne Stroustrup
Chapter 18 Vectors and Arrays [and more on pointers (nmm) ] Bjarne Stroustrup www.stroustrup.com/programming Abstract arrays, pointers, copy semantics, elements access, references Next lecture: parameterization
More informationBefore we start - Announcements: There will be a LAB TONIGHT from 5:30 6:30 in CAMP 172. In compensation, no class on Friday, Jan. 31.
Before we start - Announcements: There will be a LAB TONIGHT from 5:30 6:30 in CAMP 172 The lab will be on pointers In compensation, no class on Friday, Jan. 31. 1 Consider the bubble function one more
More informationCSC 1600 Memory Layout for Unix Processes"
CSC 16 Memory Layout for Unix Processes" 1 Lecture Goals" Behind the scenes of running a program" Code, executable, and process" Memory layout for UNIX processes, and relationship to C" : code and constant
More informationPointers II. Class 31
Pointers II Class 31 Compile Time all of the variables we have seen so far have been declared at compile time they are written into the program code you can see by looking at the program how many variables
More informationLecture Notes on Queues
Lecture Notes on Queues 15-122: Principles of Imperative Computation Frank Pfenning and Jamie Morgenstern Lecture 9 February 14, 2012 1 Introduction In this lecture we introduce queues as a data structure
More informationPROBLEM 1 : (Vocabulary: 8 points) For each of the words/phrases below, circle the denition that is the best description as it pertains in the context
Test 1: CPS 100 Owen Astrachan February 12, 1996 Name: Honor code acknowledgement (signature) Problem 1 Problem 2 Problem 3 Problem 4 Extra TOTAL: value 8 pts. 18 pts. 13 pts. 16 pts. 6 pts. 57 pts. grade
More informationProcedures and Run-Time Storage
Procedures and Run-Time Storage Compiler Design CSE 504 1 Parameterless Procedures 2 Parameter Passing 3 Storage Organization Last modifled: Mon Mar 21 2016 at 12:11:19 EDT Version: 1.3 20:58:09 2012/04/09
More informationA brief introduction to C++
A brief introduction to C++ Rupert Nash r.nash@epcc.ed.ac.uk 13 June 2018 1 References Bjarne Stroustrup, Programming: Principles and Practice Using C++ (2nd Ed.). Assumes very little but it s long Bjarne
More information377 Student Guide to C++
377 Student Guide to C++ c Mark Corner January 21, 2004 1 Introduction In this course you will be using the C++ language to complete several programming assignments. Up to this point we have only provided
More information