libtools Documentation

Size: px
Start display at page:

Download "libtools Documentation"

Transcription

1 libtools Documentation Release 0.1 Thibaut DIRLIK January 26, 2017

2

3 Contents 1 Documentation Compiling and installing Arrays Lists i

4 ii

5 The libtools library is a user-focused, easy to use and well documented C library which provides simple containers (lists, arrays and hash), string manipulating functions, and much more. Performance is not our main goal. We really want libtools to be easy to use so you can start using it in a few minutes, and enjoy its simplicity. If you are looking for a full-featured and performance oriented library, take a look at GLib, but it s really bigger and more complicated. Note: Currently, libtools only supports Linux. It should compile correctly with any recent version of gcc or clang. We are open to contributions on the Github page of the project. Contents 1

6 2 Contents

7 CHAPTER 1 Documentation 1.1 Compiling and installing Installing scons To build libtools, you need to install SCons, which is a simple build system based on Python. Most linux distributions provides a package for it (like sudo apt-get install scons on Ubuntu). Please read the scons documentation if you need more informations about installing scons Getting the source code You can download a specific release on github, or you can clone the repository to get the last version: $ git clone This will create a directory libtools in your current directory Compiling To compile libtools in release mode, just type: $ scons The library is then avaiable in the build directory. Compiling options You can pass some options to scons: tests=1 - Build unit tests, in build/tests debug=1 - Build libtools in debug mode, enabling assertions and debugging symbols. static=1 - Creates a static version of libtools. Example: $ scons tests=1 debug=1 static=1 3

8 1.1.4 Cleaning If you need to clean the build, you can either delete the build directory, or run the scons -c command, with the same options you used for building. 1.2 Arrays In libtools, the array_t is a basic array of void*. Unlike basic C arrays, it will dynamically resize when you add elements to it (doubling its size every time it s resized): /* Creates a new array. You can use array_new_sized() method if you * want to specify the initial size, else a default value is used. */ array_t *a = array_new(); /* You can use array_append() or array_insert() to add elements in the * array. The array_set() method let you update an existing index. */ array_append(a, "Hello"); array_append(a, "World"); array_set(a, 1, "people!"); /* The array_size() method returns the number of elements in the array. */ for (size_t i = 0; i < array_size(a); i++) { printf("elem %zu: %s\n", i, array_get(a, i)); } /* Finally, free the array (not its data!) */ array_destroy(a); Arrays are very fast containers if you need to access elements by index. Resizing the array have a cost, which is amortized by doubling its size each time. Using array_new_sized() is a good idea to avoid resizing, when you know how much elements your array might contains (approximatively). However, removing or inserting elements inside the array will move all elements, and is an expensive operation. If you plan to do a lot of insertion or removal, you should think about using a linked list. Note: Like C arrays, libtools arrays are 0-indexed. Warning: When compiled in debug mode, their is an assert call to check that the positions passed to array function are valid (which means you don t try to access data outside the array). However, there is absolutely no check in release mode, and you could corrupt memory The array_t type Warning: You should not access these struct members directly. Use available functions to manipulate arrays. They are documented for general purpose. array_t You will never have to access these struct members, but they are documented for general purpose. Use functions (most are inlined, so it s fast). 4 Chapter 1. Documentation

9 void** data This C array will contain the data. size_t data_size This is the current size of the data array. size_t len This is the number of elements currently in the array Creates a new array with array_new() or array_new_sized() array_t* array_new() Creates a new array and returns a pointer to the allocated structure. This functions returns NULL in case of failure (if malloc() fails). array_t* array_new_sized(size_t size) Same as array_new() except that you can specify the initial size of the array. This is useful if you already know how much elements will be stored, so it won t have to reallocate memory Insert new elements with array_append() or array_insert() int array_append(array_t* array, const void* element) This function appends element at the end of the array, resizing the array if needed. If the array is resized, this function could return -1 because of realloc() failure. int array_insert(array_t* array, size_t position, const void* element) This function let you insert an element at any position. All the elements after position will move to the right, and the new element will be inserted at the position. If the array is resized, this function could return -1 because of realloc() failure Remove elements with array_remove() void array_remove(array_t* array, size_t position) Removes the element at the given position Retrieve and update elements with array_get() and array_set() void array_set(array_t *array, size_t position, const void *element) Sets the element at the position to element. The position must contains an existing element. You can t use this function to insert a new element. void* array_get(array_t *array, size_t position) Returns the element at the specified position Get the number of elements with array_size() size_t array_size(array_t *array) Returns the number of elements in the array Arrays 5

10 1.2.7 Destroy an array with array_destroy() and array_destroy_free() void array_destroy(array_t *array) Destroy the specified array. void array_destroy_free(array_t *array) Destroy the specified array and also call free() on all its element. 1.3 Lists Libtools provides a list_t type, which is an easy-to-use doubly linked list implementation. Unlike arrays, inserting an elements in a list is a fast and constant O(1) operation. Accessing first or last element is also fast and constant operation. However, accessing an element by index requires to iterate over the list, and is a O(n) operation. Searching an element is also a O(n) operation. Here is a simple example: /* Creates a new list. */ list_t* list = list_new(); /* Append elements at the end of the list. */ list_append(list, "elem1"); list_append(list, "elem2"); /* Insert an element at the begin of the list. */ list_prepend(list, "elem0"); /* Iterates over the list, and print the value. */ list_each(char, elem, list) { printf("%s\n", elem); } /* Destroy the list */ list_destroy(list); Internally, each element of a list is a list_node_t, containing a list_node_t.data pointer. When you add an element to a list, a new list_node_t object containing a pointer to your data is allocated and added to the list. Multiple nodes can reference the same data. The list_t structure contains a reference to the first and last list_node_t of the list list_t and list_node_t types Warning: You should not access these struct members directly. Use available functions to manipulate lists. They are documented for general purpose. list_t list_node_t* first A pointer to the first node of the list. 6 Chapter 1. Documentation

11 list_node_t* last A pointer to the last node of the list. size_t size The number of elements in the list. compare_fn_t compare_fn A pointer to the function used to compare elements. This function is used when you search the node containing a specified data. The default function just compare data address. list_node_t void* data A pointer to the data associated to a node. list_node_t* next A pointer to the next element in the list. The is NULL if it s the last node. list_node_t* prev A pointer to the previous element in the list. The is NULL if it s the first node Comparaison function Because you can store void* pointers as data in the list, we can t know how to compare you data. But some list function needs to compare them. For example, when you call list_find(), you pass the data you are looking for, and list_find() will iterate over the list and call the comparaison function on every item until one which is equal to the one you passed is found. The comparaison function must be a function with the following signature: int some_comparaison_function(const void* data1, const void* data2); Exactly like the well known strcmp(), it must returns -1 if data1 is lesser than data2, 0 if they are equal, and 1 if data1 is greater than data2. The default comparaison function simply compares the pointer address of your objects. Warning: Nothing prevent you from storing objects of differents types in your list. If you do so, make sure your comparaison function can handle this correctly Creates a new list with list_new() and friends list_t* list_new() Creates a new list and returns a pointer to the allocated structure. This functions returns NULL in case of failure (if malloc() fails). list_t* list_new_str() Same as list_new() except that it uses strcmp() as a comparaison function. This is a useful shortcut if you use lists of strings (char*). list_t* list_new_custom(compare_fn_t func) Same as list_new() except you can explicitly set the comparaison function Lists 7

12 1.3.4 Add elements with list_append(), list_insert() and list_prepend() These functions return NULL if malloc() failed, or the internal list_node_t which has been created to store your data. In most case you won t need it. list_node_t* list_append(list_t *list, const void *data) Appends the specified data at the end of the list. list_node_t* list_insert(list_t* list, size_t position, const void* data) Insert the specified data at the specified position. This function iterates over the list up to the specified position, so inserting near the end is longer than inserting near the begin. list_node_t* list_prepend(list_t* list, const void *data) Insert the specified data at the begin of you list Remove elements with list_remove(), list_remove_node() and list_remove_at() int list_remove(list_t *list, const void *data) This function will search your data in the list using list_find() and remove the first matching element from the list. Returns -1 if the element is not found in the list, 0 otherwise. void list_remove_node(list_t *list, list_node_t *node) Removes the specified node from the list. int list_remove_at(list_t *list, size_t position) Removes the element at the specified position. Returns -1 if the position is invalid, 0 otherwise Find elements with list_find() and list_find_node() ssize_t list_find(list_t *list, const void *data) This function will iterate over the list until it finds a node which contains the specified data. It uses the comparaison function to determine the equality of the data. Returns the data position in the list, or -1 if it s not found. list_node_t* list_find_node(list_t *list, const void *data) Same as list_find() except that it returns the data s list_node_t (or NULL) Retrieve elements with list_at(), list_node_at() and list_pop() These functions will return NULL if you pass an invalid position. void* list_at(list_t *list, size_t position) Returns the data associated to the node at position. list_node_t* list_node_at(list_t *list, size_t position) Returns the internal node at the specified position. void* list_pop(list_t* list) Remove the first node of the list, and returns its data. 8 Chapter 1. Documentation

13 1.3.8 Update elements with list_set() and list_node_set() int list_set(list_t* list, size_t position, const void* data) Sets the data of the node at the specified position to data. Returns 0 on succes or -1 if the position is invalid. void list_node_set(list_t* list, list_node_t* node, const void* data) Sets the data of the specified node to data Get the size of the list with list_size() size_t list_size(list_t* list) Returns the number of elements in the list Destroy a list with list_destroy() and list_destroy_free() size_t list_destroy(list_t* list) Destroy the list, freeing all nodes and the associated list_t structure. size_t list_destroy_free(list_t* list) Same as list_destroy() but also call free() on the data. Warning: You have to be sure that all your data has been allocated on the heap Lists 9

14 10 Chapter 1. Documentation

15 Index A array_append (C function), 5 array_destroy (C function), 6 array_destroy_free (C function), 6 array_get (C function), 5 array_insert (C function), 5 array_new (C function), 5 array_new_sized (C function), 5 array_remove (C function), 5 array_set (C function), 5 array_size (C function), 5 array_t (C type), 4 array_t.data (C member), 4 array_t.data_size (C member), 5 array_t.len (C member), 5 L list_append (C function), 8 list_at (C function), 8 list_destroy (C function), 9 list_destroy_free (C function), 9 list_find (C function), 8 list_find_node (C function), 8 list_insert (C function), 8 list_new (C function), 7 list_new_custom (C function), 7 list_new_str (C function), 7 list_node_at (C function), 8 list_node_set (C function), 9 list_node_t (C type), 7 list_node_t.data (C member), 7 list_node_t.next (C member), 7 list_node_t.prev (C member), 7 list_pop (C function), 8 list_prepend (C function), 8 list_remove (C function), 8 list_remove_at (C function), 8 list_remove_node (C function), 8 list_set (C function), 9 list_size (C function), 9 list_t (C type), 6 list_t.compare_fn (C member), 7 list_t.first (C member), 6 list_t.last (C member), 6 list_t.size (C member), 7 11

Algorithms, Data Structures, and Problem Solving

Algorithms, Data Structures, and Problem Solving Algorithms, Data Structures, and Problem Solving Masoumeh Taromirad Hamlstad University DT4002, Fall 2016 Container Concepts containers store data container operations: insertion retrieval removal iteration

More information

The C++ Object Lifecycle. EECS 211 Winter 2019

The C++ Object Lifecycle. EECS 211 Winter 2019 The C++ Object Lifecycle EECS 211 Winter 2019 2 Initial code setup $ cd eecs211 $ curl $URL211/lec/09lifecycle.tgz tar zx $ cd 09lifecycle 3 Road map Owned string type concept Faking it An owned string

More information

CS61, Fall 2012 Section 2 Notes

CS61, Fall 2012 Section 2 Notes CS61, Fall 2012 Section 2 Notes (Week of 9/24-9/28) 0. Get source code for section [optional] 1: Variable Duration 2: Memory Errors Common Errors with memory and pointers Valgrind + GDB Common Memory Errors

More information

Pointers, Dynamic Data, and Reference Types

Pointers, 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 information

PRINCIPLES OF OPERATING SYSTEMS

PRINCIPLES OF OPERATING SYSTEMS PRINCIPLES OF OPERATING SYSTEMS Tutorial-1&2: C Review CPSC 457, Spring 2015 May 20-21, 2015 Department of Computer Science, University of Calgary Connecting to your VM Open a terminal (in your linux machine)

More information

Consider the above code. This code compiles and runs, but has an error. Can you tell what the error is?

Consider the above code. This code compiles and runs, but has an error. Can you tell what the error is? Discussion 1H Notes (Week 8, May 20) TA: Brian Choi (schoi@cs.ucla.edu) Section Webpage: http://www.cs.ucla.edu/~schoi/cs31 Dynamic Allocation of Memory Recall that when you create an array, you must know

More information

Armide Documentation. Release Kyle Mayes

Armide Documentation. Release Kyle Mayes Armide Documentation Release 0.3.1 Kyle Mayes December 19, 2014 Contents 1 Introduction 1 1.1 Features.................................................. 1 1.2 License..................................................

More information

CS201 Some Important Definitions

CS201 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 information

ECE 2400 Computer Systems Programming, Fall 2017 Programming Assignment 2: List and Vector Data Structures

ECE 2400 Computer Systems Programming, Fall 2017 Programming Assignment 2: List and Vector Data Structures ECE 2400 Computer Systems Programming, Fall 2017 Programming Assignment 2: List and Vector Data Structures School of Electrical and Computer Engineering Cornell University revision: 2017-10-01-16-30 1.

More information

C Bounds Non-Checking. Code Red. Reasons Not to Use C. Good Reasons to Use C. So, why would anyone use C today? Lecture 10: *&!

C Bounds Non-Checking. Code Red. Reasons Not to Use C. Good Reasons to Use C. So, why would anyone use C today? Lecture 10: *&! CS216: Program and Data Representation University of Virginia Computer Science Spring 2006 David Evans Lecture 10: *&!%[]++ int main (void) int x = 9; char s[4]; C Bounds Non-Checking gets(s); printf ("s

More information

ECE 2400 Computer Systems Programming Fall 2017 Topic 7: C Lists and Vectors

ECE 2400 Computer Systems Programming Fall 2017 Topic 7: C Lists and Vectors ECE 2400 Computer Systems Programming Fall 2017 Topic 7: C Lists and Vectors School of Electrical and Computer Engineering Cornell University revision: 2017-09-29-08-04 1 Lists 2 1.1. List Interface................................

More information

Kurt Schmidt. October 30, 2018

Kurt Schmidt. October 30, 2018 to Structs Dept. of Computer Science, Drexel University October 30, 2018 Array Objectives to Structs Intended audience: Student who has working knowledge of Python To gain some experience with a statically-typed

More information

Dynamic memory. EECS 211 Winter 2019

Dynamic memory. EECS 211 Winter 2019 Dynamic memory EECS 211 Winter 2019 2 Initial code setup $ cd eecs211 $ curl $URL211/lec/06dynamic.tgz tar zx $ cd 06dynamic 3 Oops! I made a mistake. In C, the declaration struct circle read_circle();

More information

Pointers. A pointer is simply a reference to a variable/object. Compilers automatically generate code to store/retrieve variables from memory

Pointers. A pointer is simply a reference to a variable/object. Compilers automatically generate code to store/retrieve variables from memory Pointers A pointer is simply a reference to a variable/object Compilers automatically generate code to store/retrieve variables from memory It is automatically generating internal pointers We don t have

More information

ECE 2400 Computer Systems Programming, Fall 2018 PA2: List and Vector Data Structures

ECE 2400 Computer Systems Programming, Fall 2018 PA2: List and Vector Data Structures School of Electrical and Computer Engineering Cornell University revision: 2018-09-25-13-37 1. Introduction The second programming assignment is designed to give you experience working with two important

More information

Contents. A Review of C language. Visual C Visual C++ 6.0

Contents. A Review of C language. Visual C Visual C++ 6.0 A Review of C language C++ Object Oriented Programming Pei-yih Ting NTOU CS Modified from www.cse.cuhk.edu.hk/~csc2520/tuto/csc2520_tuto01.ppt 1 2 3 4 5 6 7 8 9 10 Double click 11 12 Compile a single source

More information

Midterm Exam Nov 8th, COMS W3157 Advanced Programming Columbia University Fall Instructor: Jae Woo Lee.

Midterm Exam Nov 8th, COMS W3157 Advanced Programming Columbia University Fall Instructor: Jae Woo Lee. Midterm Exam Nov 8th, 2012 COMS W3157 Advanced Programming Columbia University Fall 2012 Instructor: Jae Woo Lee About this exam: - There are 4 problems totaling 100 points: problem 1: 30 points problem

More information

1d: tests knowing about bitwise fields and union/struct differences.

1d: tests knowing about bitwise fields and union/struct differences. Question 1 1a: char ptr[] = Hello World ; char a = ptr[1], b = *(ptr+6); Creates an array of 12 elements, 11 visible letters and a character value 0 at the end. i true ii true iii false iv false v true

More information

CSC 1600 Memory Layout for Unix Processes"

CSC 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 information

In Java we have the keyword null, which is the value of an uninitialized reference type

In Java we have the keyword null, which is the value of an uninitialized reference type + More on Pointers + Null pointers In Java we have the keyword null, which is the value of an uninitialized reference type In C we sometimes use NULL, but its just a macro for the integer 0 Pointers are

More information

C++ for Java Programmers

C++ for Java Programmers Lecture 6 More pointing action Yesterday we considered: Pointer Assignment Dereferencing Pointers to Pointers to Pointers Pointers and Array Pointer Arithmetic 2 Todays Lecture What do we know 3 And now

More information

tm1640-rpi Documentation

tm1640-rpi Documentation tm1640-rpi Documentation Release 0.1 Michael Farrell October 20, 2015 Contents 1 Introduction 3 1.1 Resources................................................. 3 2 Building the software 5 3 Wiring the

More information

Linked Lists in C and C++

Linked Lists in C and C++ Linked Lists in C and C++ Professor Hugh C. Lauer CS-2303, System Programming Concepts (Slides include materials from The C Programming Language, 2 nd edition, by Kernighan and Ritchie, Absolute C++, by

More information

CSE 374 Programming Concepts & Tools. Hal Perkins Spring 2010

CSE 374 Programming Concepts & Tools. Hal Perkins Spring 2010 CSE 374 Programming Concepts & Tools Hal Perkins Spring 2010 Lecture 19 Introduction ti to C++ C++ C++ is an enormous language: g All of C Classes and objects (kind of like Java, some crucial differences)

More information

CS 31: Intro to Systems Pointers and Memory. Martin Gagne Swarthmore College February 16, 2016

CS 31: Intro to Systems Pointers and Memory. Martin Gagne Swarthmore College February 16, 2016 CS 31: Intro to Systems Pointers and Memory Martin Gagne Swarthmore College February 16, 2016 So we declared a pointer How do we make it point to something? 1. Assign it the address of an existing variable

More information

Arrays and Memory Management

Arrays and Memory Management Arrays and Memory Management 1 Pointing to Different Size Objects Modern machines are byte-addressable Hardware s memory composed of 8-bit storage cells, each has a unique address A C pointer is just abstracted

More information

Heap Arrays and Linked Lists. Steven R. Bagley

Heap Arrays and Linked Lists. Steven R. Bagley Heap Arrays and Linked Lists Steven R. Bagley Recap Data is stored in variables Can be accessed by the variable name Or in an array, accessed by name and index Variables and arrays have a type Create our

More information

ENCM 339 Fall 2017 Tutorial for Week 8

ENCM 339 Fall 2017 Tutorial for Week 8 ENCM 339 Fall 2017 Tutorial for Week 8 for section T01 Steve Norman, PhD, PEng Electrical & Computer Engineering Schulich School of Engineering University of Calgary 2 November, 2017 ENCM 339 T01 Tutorial

More information

CSE 374 Programming Concepts & Tools. Hal Perkins Fall 2015 Lecture 19 Introduction to C++

CSE 374 Programming Concepts & Tools. Hal Perkins Fall 2015 Lecture 19 Introduction to C++ CSE 374 Programming Concepts & Tools Hal Perkins Fall 2015 Lecture 19 Introduction to C++ C++ C++ is an enormous language: All of C Classes and objects (kind of like Java, some crucial differences) Many

More information

Chapter 17: Linked Lists

Chapter 17: Linked Lists Chapter 17: Linked Lists 17.1 Introduction to the Linked List ADT Introduction to the Linked List ADT Linked list: set of data structures (nodes) that contain references to other data structures list head

More information

Important From Last Time

Important From Last Time Important From Last Time Embedded C Pros and cons Macros and how to avoid them Intrinsics Interrupt syntax Inline assembly Today Advanced C What C programs mean How to create C programs that mean nothing

More information

Page 1. Today. Important From Last Time. Is the assembly code right? Is the assembly code right? Which compiler is right?

Page 1. Today. Important From Last Time. Is the assembly code right? Is the assembly code right? Which compiler is right? Important From Last Time Today Embedded C Pros and cons Macros and how to avoid them Intrinsics Interrupt syntax Inline assembly Advanced C What C programs mean How to create C programs that mean nothing

More information

Dynamic Memory: Alignment and Fragmentation

Dynamic 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 information

Important From Last Time

Important From Last Time Important From Last Time Embedded C Ø Pros and cons Macros and how to avoid them Intrinsics Interrupt syntax Inline assembly Today Advanced C What C programs mean How to create C programs that mean nothing

More information

CS 322 Operating Systems Programming Assignment 4 Writing a memory manager Due: April 5, 11:30 PM

CS 322 Operating Systems Programming Assignment 4 Writing a memory manager Due: April 5, 11:30 PM CS 322 Operating Systems Programming Assignment 4 Writing a memory manager Due: April 5, 11:30 PM Goals To understand the nuances of building a memory allocator. To create a shared library. Background

More information

C Review. MaxMSP Developers Workshop Summer 2009 CNMAT

C Review. MaxMSP Developers Workshop Summer 2009 CNMAT C Review MaxMSP Developers Workshop Summer 2009 CNMAT C Syntax Program control (loops, branches): Function calls Math: +, -, *, /, ++, -- Variables, types, structures, assignment Pointers and memory (***

More information

Arrays and Pointers. Overview. Arrays Introducing Pointers C-Style Character Strings Multidimensioned Arrays

Arrays and Pointers. Overview. Arrays Introducing Pointers C-Style Character Strings Multidimensioned Arrays Arrays and Pointers Arrays Introducing Pointers C-Style Character Strings Multidimensioned Arrays 1 Overview C++ defines two lower-level compound types: arrays and pointers that are similar to vectors

More information

G52CPP C++ Programming Lecture 13

G52CPP C++ Programming Lecture 13 G52CPP C++ Programming Lecture 13 Dr Jason Atkin http://www.cs.nott.ac.uk/~jaa/cpp/ g52cpp.html 1 Last lecture Function pointers Arrays of function pointers Virtual and non-virtual functions vtable and

More information

Advanced Pointer & Data Storage

Advanced Pointer & Data Storage 18, 19: storage classes 14: Preprocessor & Polymorphism in C) 15 : command line building 26 : stdarg Advanced Pointer & Data Storage (for ch. 14, 15 18, 19, 26) Contents Preprocessor & Polymorphism in

More information

At this time we have all the pieces necessary to allocate memory for an array dynamically. Following our example, we allocate N integers as follows:

At this time we have all the pieces necessary to allocate memory for an array dynamically. Following our example, we allocate N integers as follows: Pointers and Arrays Part II We will continue with our discussion on the relationship between pointers and arrays, and in particular, discuss how arrays with dynamical length can be created at run-time

More information

Homework 3 CS161 Computer Security, Fall 2008 Assigned 10/07/08 Due 10/13/08

Homework 3 CS161 Computer Security, Fall 2008 Assigned 10/07/08 Due 10/13/08 Homework 3 CS161 Computer Security, Fall 2008 Assigned 10/07/08 Due 10/13/08 For your solutions you should submit a hard copy; either hand written pages stapled together or a print out of a typeset document

More information

DAY 3. CS3600, Northeastern University. Alan Mislove

DAY 3. CS3600, Northeastern University. Alan Mislove C BOOTCAMP DAY 3 CS3600, Northeastern University Slides adapted from Anandha Gopalan s CS132 course at Univ. of Pittsburgh and Pascal Meunier s course at Purdue Memory management 2 Memory management Two

More information

APT Session 4: C. Software Development Team Laurence Tratt. 1 / 14

APT Session 4: C. Software Development Team Laurence Tratt. 1 / 14 APT Session 4: C Laurence Tratt Software Development Team 2017-11-10 1 / 14 http://soft-dev.org/ What to expect from this session 1 C. 2 / 14 http://soft-dev.org/ Prerequisites 1 Install either GCC or

More information

Heap Arrays. Steven R. Bagley

Heap Arrays. Steven R. Bagley Heap Arrays Steven R. Bagley Recap Data is stored in variables Can be accessed by the variable name Or in an array, accessed by name and index a[42] = 35; Variables and arrays have a type int, char, double,

More information

A brief introduction to C programming for Java programmers

A 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 information

CS 241 Honors Memory

CS 241 Honors Memory CS 241 Honors Memory Ben Kurtovic Atul Sandur Bhuvan Venkatesh Brian Zhou Kevin Hong University of Illinois Urbana Champaign February 20, 2018 CS 241 Course Staff (UIUC) Memory February 20, 2018 1 / 35

More information

BBM 201 DATA STRUCTURES

BBM 201 DATA STRUCTURES BBM 201 DATA STRUCTURES Lecture 8: Dynamically Allocated Linked Lists 2017-2018 Fall int x; x = 8; int A[4]; An array is stored as one contiguous block of memory. How can we add a fifth element to the

More information

High Performance Computing and Programming, Lecture 3

High Performance Computing and Programming, Lecture 3 High Performance Computing and Programming, Lecture 3 Memory usage and some other things Ali Dorostkar Division of Scientific Computing, Department of Information Technology, Uppsala University, Sweden

More information

Linked data structures. EECS 211 Winter 2019

Linked data structures. EECS 211 Winter 2019 Linked data structures EECS 211 Winter 2019 2 Initial code setup $ cd eecs211 $ curl $URL211/lec/07linked.tgz tar zx $ cd 07linked Preliminaries 3 4 Two views on malloc and free The client/c view: malloc(n)

More information

CS201: Lab #4 Writing a Dynamic Storage Allocator

CS201: Lab #4 Writing a Dynamic Storage Allocator CS201: Lab #4 Writing a Dynamic Storage Allocator In this lab you will write a dynamic storage allocator for C programs, i.e., your own version of the malloc, free and realloc routines. You are encouraged

More information

COMP 321: Introduction to Computer Systems

COMP 321: Introduction to Computer Systems Assigned: 3/8/18, Due: 3/29/18 Important: This project may be done individually or in pairs. Be sure to carefully read the course policies for assignments (including the honor code policy) on the assignments

More information

Before 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. 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 information

SmartHeap for Multi-Core

SmartHeap for Multi-Core SmartHeap for Multi-Core Getting Started and Platform Guide for Linux Version 11.2 SmartHeap and HeapAgent are trademarks of Compuware Corporation. All other trademarks are the property of their respective

More information

Goals of Today s Lecture

Goals of Today s Lecture Function Pointers and Abstract Data Types Prof. David August COS 217 1 Goals of Today s Lecture Function pointers o Sorting an array of integers o Sorting an array of strings o Sorting an array of any

More information

Chapter 5. Section 5.4 The Common String Library Functions. CS 50 Hathairat Rattanasook

Chapter 5. Section 5.4 The Common String Library Functions. CS 50 Hathairat Rattanasook Chapter 5 Section 5.4 The Common String Library Functions CS 50 Hathairat Rattanasook Library Functions We already discussed the library function fgets() Library functions are available: to find the length

More information

Optimizing Dynamic Memory Management

Optimizing Dynamic Memory Management Optimizing Dynamic Memory Management 1 Goals of this Lecture Help you learn about: Details of K&R heap mgr Heap mgr optimizations related to Assignment #5 Faster free() via doubly-linked list, redundant

More information

Classes in C++98 and C++11

Classes in C++98 and C++11 Classes in C++98 and C++11 January 10, 2018 Brian A. Malloy Slide 1 of 38 1. When we refer to C++98, we are referring to C++98 and C++03, since they differ only slightly. C++98 contained 3 types of constructors,

More information

ECE551 Midterm Version 1

ECE551 Midterm Version 1 Name: ECE551 Midterm Version 1 NetID: There are 7 questions, with the point values as shown below. You have 75 minutes with a total of 75 points. Pace yourself accordingly. This exam must be individual

More information

Lab # 4. Files & Queues in C

Lab # 4. Files & Queues in C Islamic University of Gaza Faculty of Engineering Department of Computer Engineering ECOM 4010: Lab # 4 Files & Queues in C Eng. Haneen El-Masry October, 2013 2 FILE * Files in C For C File I/O you need

More information

Lab 5 - Linked Lists Git Tag: Lab5Submission

Lab 5 - Linked Lists Git Tag: Lab5Submission UNIVERSITY OF CALIFORNIA, SANTA CRUZ BOARD OF STUDIES IN COMPUTER ENGINEERING CMPE-13/L: COMPUTER SYSTEMS AND C PROGRAMMING WINTER 2016 Lab 5 - Linked Lists Git Tag: Lab5Submission Introduction This lab

More information

ECE 2400 Computer Systems Programming, Fall 2017 Prelim 1 Prep

ECE 2400 Computer Systems Programming, Fall 2017 Prelim 1 Prep revision: 2017-09-29-17-49 These problems are not meant to be exactly like the problems that will be on the prelim. These problems are instead meant to represent the kind of understanding you should be

More information

Programs in memory. The layout of memory is roughly:

Programs in memory. The layout of memory is roughly: Memory 1 Programs in memory 2 The layout of memory is roughly: Virtual memory means that memory is allocated in pages or segments, accessed as if adjacent - the platform looks after this, so your program

More information

CS 31: Intro to Systems Pointers and Memory. Kevin Webb Swarthmore College October 2, 2018

CS 31: Intro to Systems Pointers and Memory. Kevin Webb Swarthmore College October 2, 2018 CS 31: Intro to Systems Pointers and Memory Kevin Webb Swarthmore College October 2, 2018 Overview How to reference the location of a variable in memory Where variables are placed in memory How to make

More information

Clang Static Analyzer Documentation

Clang Static Analyzer Documentation Clang Static Analyzer Documentation Release 6 Analyzer Team Aug 13, 2018 Contents 1 Debug Checks 3 1.1 General Analysis Dumpers........................................ 3 1.2 Path Tracking...............................................

More information

Systems Programming/ C and UNIX

Systems Programming/ C and UNIX Systems Programming/ C and UNIX Alice E. Fischer Lecture 5 Makefiles October 2, 2017 Alice E. Fischer Lecture 5 Makefiles Lecture 5 Makefiles... 1/14 October 2, 2017 1 / 14 Outline 1 Modules and Makefiles

More information

Spring 2016, Malloc Lab: Writing Dynamic Memory Allocator

Spring 2016, Malloc Lab: Writing Dynamic Memory Allocator 1. Introduction Spring 2016, Malloc Lab: Writing Dynamic Memory Allocator Assigned: Mar. 03 Due: Mar. 17, 15:59 In this lab you will be writing a dynamic memory allocator for C programs, i.e., your own

More information

Software Design and Analysis for Engineers

Software Design and Analysis for Engineers Software Design and Analysis for Engineers by Dr. Lesley Shannon Email: lshannon@ensc.sfu.ca Course Website: http://www.ensc.sfu.ca/~lshannon/courses/ensc251 Simon Fraser University Slide Set: 4 Date:

More information

Recitation #11 Malloc Lab. November 7th, 2017

Recitation #11 Malloc Lab. November 7th, 2017 18-600 Recitation #11 Malloc Lab November 7th, 2017 1 2 Important Notes about Malloc Lab Malloc lab has been updated from previous years Supports a full 64 bit address space rather than 32 bit Encourages

More information

CS 326 Operating Systems C Programming. Greg Benson Department of Computer Science University of San Francisco

CS 326 Operating Systems C Programming. Greg Benson Department of Computer Science University of San Francisco CS 326 Operating Systems C Programming Greg Benson Department of Computer Science University of San Francisco Why C? Fast (good optimizing compilers) Not too high-level (Java, Python, Lisp) Not too low-level

More information

Data Structures in C. C Programming and Software Tools. N.C. State Department of Computer Science

Data Structures in C. C Programming and Software Tools. N.C. State Department of Computer Science Data Structures in C C Programming and Software Tools N.C. State Department of Computer Science Data Structures in C The combination of pointers, structs, and dynamic memory allocation allows for creation

More information

Cosc 242 Assignment. Due: 4pm Friday September 15 th 2017

Cosc 242 Assignment. Due: 4pm Friday September 15 th 2017 Cosc 242 Assignment Due: 4pm Friday September 15 th 2017 Group work For this assignment we require you to work in groups of three people. You may select your own group and inform us of your choice via

More information

Dynamic Memory Management. Bin Li Assistant Professor Dept. of Electrical, Computer and Biomedical Engineering University of Rhode Island

Dynamic Memory Management. Bin Li Assistant Professor Dept. of Electrical, Computer and Biomedical Engineering University of Rhode Island Dynamic Memory Management Bin Li Assistant Professor Dept. of Electrical, Computer and Biomedical Engineering University of Rhode Island 1 Dynamic Memory Allocation Dynamic memory allocation is used to

More information

Dynamic Memory Management! Goals of this Lecture!

Dynamic Memory Management! Goals of this Lecture! Dynamic Memory Management!!! 1 Goals of this Lecture! Help you learn about:! Dynamic memory management techniques! Garbage collection by the run-time system (Java)! Manual deallocation by the programmer

More information

CS 103 Unit 11. Linked Lists. Mark Redekopp

CS 103 Unit 11. Linked Lists. Mark Redekopp 1 CS 103 Unit 11 Linked Lists Mark Redekopp 2 NULL Pointer Just like there was a null character in ASCII = '\0' whose ue was 0 There is a NULL pointer whose ue is 0 NULL is "keyword" you can use in C/C++

More information

Introduction to C: Pointers

Introduction to C: Pointers Introduction to C: Pointers Nils Moschüring PhD Student (LMU) Nils Moschüring PhD Student (LMU), Introduction to C: Pointers 1 1 Introduction 2 Pointers Basics Useful: Function

More information

malloc(), calloc(), realloc(), and free()

malloc(), calloc(), realloc(), and free() 1 next CITS2002 CITS2002 schedule Dynamic data structures Initially, we focused on scalar and array variables, whose size is known at compile-time. More recently, we've focused on arrays of values, whose

More information

CSE 303: Concepts and Tools for Software Development

CSE 303: Concepts and Tools for Software Development CSE 303: Concepts and Tools for Software Development Hal Perkins Autumn 2008 Lecture 24 Introduction to C++ CSE303 Autumn 2008, Lecture 24 1 C++ C++ is an enormous language: All of C Classes and objects

More information

C Programming Review CSC 4320/6320

C Programming Review CSC 4320/6320 C Programming Review CSC 4320/6320 Overview Introduction C program Structure Keywords & C Types Input & Output Arrays Functions Pointers Structures LinkedList Dynamic Memory Allocation Macro Compile &

More information

And Even More and More C++ Fundamentals of Computer Science

And Even More and More C++ Fundamentals of Computer Science And Even More and More C++ Fundamentals of Computer Science Outline C++ Classes Special Members Friendship Classes are an expanded version of data structures (structs) Like structs, the hold data members

More information

Design and development of embedded systems for the Internet of Things (IoT) Fabio Angeletti Fabrizio Gattuso

Design and development of embedded systems for the Internet of Things (IoT) Fabio Angeletti Fabrizio Gattuso Design and development of embedded systems for the Internet of Things (IoT) Fabio Angeletti Fabrizio Gattuso Why C? Test on 21 Android Devices with 32-bits and 64-bits processors and different versions

More information

However, in C we can group related variables together into something called a struct.

However, in C we can group related variables together into something called a struct. CIT 593: Intro to Computer Systems Lecture #21 (11/27/12) Structs Unlike Java, C++, and to some extent Python, C is not traditionally considered an objectoriented language. That is, there is no concept

More information

Principles of C and Memory Management

Principles of C and Memory Management COMP281 Lecture 9 Principles of C and Memory Management Dr Lei Shi Last Lecture Today Pointer to Array Pointer Arithmetic Pointer with Functions struct Storage classes typedef union String struct struct

More information

ECE 2035 Programming HW/SW Systems Spring problems, 5 pages Exam Three 8 April Your Name (please print clearly)

ECE 2035 Programming HW/SW Systems Spring problems, 5 pages Exam Three 8 April Your Name (please print clearly) Your Name (please print clearly) This exam will be conducted according to the Georgia Tech Honor Code. I pledge to neither give nor receive unauthorized assistance on this exam and to abide by all provisions

More information

HW 3: Malloc CS 162. Due: Monday, March 28, 2016

HW 3: Malloc CS 162. Due: Monday, March 28, 2016 CS 162 Due: Monday, March 28, 2016 1 Introduction Your task in this assignment is to implement your own memory allocator from scratch. This will expose you to POSIX interfaces, force you to reason about

More information

Dynamic Memory. Dynamic Memory Allocation Strings. September 18, 2017 Hassan Khosravi / Geoffrey Tien 1

Dynamic Memory. Dynamic Memory Allocation Strings. September 18, 2017 Hassan Khosravi / Geoffrey Tien 1 Dynamic Memory Dynamic Memory Allocation Strings September 18, 2017 Hassan Khosravi / Geoffrey Tien 1 Pointer arithmetic If we know the address of the first element of an array, we can compute the addresses

More information

Linked Lists. Gaddis Ch. 17. CS 2308 :: Spring 2016 Molly O'Neil

Linked Lists. Gaddis Ch. 17. CS 2308 :: Spring 2016 Molly O'Neil Linked Lists Gaddis Ch. 17 CS 2308 :: Spring 2016 Molly O'Neil List ADT A list is an abstract data type representing an ordered sequence of values For example, both MP3 Player assignments have used lists:

More information

QUIZ. What is wrong with this code that uses default arguments?

QUIZ. What is wrong with this code that uses default arguments? QUIZ What is wrong with this code that uses default arguments? Solution The value of the default argument should be placed in either declaration or definition, not both! QUIZ What is wrong with this code

More information

Type Aliases. Examples: using newtype = existingtype; // C++11 typedef existingtype newtype; // equivalent, still works

Type Aliases. Examples: using newtype = existingtype; // C++11 typedef existingtype newtype; // equivalent, still works Type Aliases A name may be defined as a synonym for an existing type name. Traditionally, typedef is used for this purpose. In the new standard, an alias declaration can also be used C++11.Thetwoformsareequivalent.

More information

Memory Organization. The machine code and data associated with it are in the code segment

Memory Organization. The machine code and data associated with it are in the code segment Memory Management Memory Organization During run time, variables can be stored in one of three pools : 1. Stack 2. Global area (Static heap) 3. Dynamic heap The machine code and data associated with it

More information

CSC 270 Survey of Programming Languages. What is a Pointer?

CSC 270 Survey of Programming Languages. What is a Pointer? CSC 270 Survey of Programming Languages C Lecture 6 Pointers and Dynamic Arrays What is a Pointer? A pointer is the address in memory of a variable. We call it a pointer because we envision the address

More information

Secure Software Programming and Vulnerability Analysis

Secure Software Programming and Vulnerability Analysis Secure Software Programming and Vulnerability Analysis Christopher Kruegel chris@auto.tuwien.ac.at http://www.auto.tuwien.ac.at/~chris Heap Buffer Overflows and Format String Vulnerabilities Secure Software

More information

Fall 2018 Discussion 2: September 3, 2018

Fall 2018 Discussion 2: September 3, 2018 CS 61C C Basics Fall 2018 Discussion 2: September 3, 2018 1 C C is syntactically similar to Java, but there are a few key differences: 1. C is function-oriented, not object-oriented; there are no objects.

More information

Programming Tips for CS758/858

Programming Tips for CS758/858 Programming Tips for CS758/858 January 28, 2016 1 Introduction The programming assignments for CS758/858 will all be done in C. If you are not very familiar with the C programming language we recommend

More information

Mid-term Exam. Fall Semester 2017 KAIST EE209 Programming Structures for Electrical Engineering. Name: Student ID:

Mid-term Exam. Fall Semester 2017 KAIST EE209 Programming Structures for Electrical Engineering. Name: Student ID: Fall Semester 2017 KAIST EE209 Programming Structures for Electrical Engineering Mid-term Exam Name: This exam is closed book and notes. Read the questions carefully and focus your answers on what has

More information

A brief introduction to C++

A 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 information

dmrlib Documentation Release Wijnand Modderman-Lenstra

dmrlib Documentation Release Wijnand Modderman-Lenstra dmrlib Documentation Release 0.99.3 Wijnand Modderman-Lenstra September 03, 2016 Contents 1 Overview 1 2 Documentation 3 2.1 bits: bit and byte manipulation...................................... 3 2.2

More information

Embedded Software TI2726 B. 3. C tools. Koen Langendoen. Embedded Software Group

Embedded Software TI2726 B. 3. C tools. Koen Langendoen. Embedded Software Group Embedded Software 3. C tools TI2726 B Koen Langendoen Embedded Software Group C development cycle 1. [Think] 2. Edit 3. Compile 4. Test 5. Debug 6. Tune UNIX toolbox 2. vi, emacs, gedit 3. gcc, make 4.

More information

CS 261 Fall C Introduction. Variables, Memory Model, Pointers, and Debugging. Mike Lam, Professor

CS 261 Fall C Introduction. Variables, Memory Model, Pointers, and Debugging. Mike Lam, Professor CS 261 Fall 2017 Mike Lam, Professor C Introduction Variables, Memory Model, Pointers, and Debugging The C Language Systems language originally developed for Unix Imperative, compiled language with static

More information

Pointer Arithmetic and Lexical Scoping. CS449 Spring 2016

Pointer Arithmetic and Lexical Scoping. CS449 Spring 2016 Pointer Arithmetic and Lexical Scoping CS449 Spring 2016 Review Pitfall 1 from previous lecture void foo(char *s) { s = "World"; int main() { char *str = "Hello"; foo(str); printf("%s\n", str); return

More information

ECE551 Midterm Version 1

ECE551 Midterm Version 1 Name: ECE551 Midterm Version 1 NetID: There are 7 questions, with the point values as shown below. You have 75 minutes with a total of 75 points. Pace yourself accordingly. This exam must be individual

More information