CMSC 212: Intro. to Low-Level Programming Concepts

Summer 2009

Lectures

  1. Mon., June 1: Introduction, low-level programming, UNIX memory model, intro to C
  2. Wed., June 3: Compilation process, basic I/O, C data types, strings, arrays, pointers, the const keyword, variable/identifier properties
  3. Fri., June 5: if statements, loops, switch statements, bit operations, hexadecimal and octal numbers, shift and bitwise operators
  4. Mon., June 8: bitmasking, type promotion, mixed-type assignments, more operators, precedence and associativity, lvalues
  5. Wed., June 10: intro. to structures, typedef, dot operator, comparing structures, nested structures, pass by value, pointers and structures
  6. Fri., June 12: pointer to structure parameters, unions, arrays, the #define preprocessor directive, pointer declarations, pointers to pointers, the NULL pointer, type conversion with pointers, pointer arithmetic
  7. Mon., June 15: more on type conversion and pointer arithmetic, the relationship between arrays and pointers, arrays of pointers, generic pointers
  8. Wed., June 17: Make and makefiles, separate compilation, header files, function definitions, prototypes, recursive functions
  9. Fri., June 19: functions with array parameters, the string.h library, various implementations of strlen()
  10. Wed., June 24: length-restricted string functions, character classification and transformation functions
  11. Fri., June 26: assembly language concepts, assembly language example execution
  12. Mon., June 29: the preprocessor, macros, conditional compilation, dynamic memory allocation, malloc(), calloc(), and free()
  13. Wed., July 1: common errors with dynamic memory allocation, the realloc() function, linked lists in C
  14. Mon., July 6: working with linked lists, doubly linked lists, binary search trees; goals and requirements of heap management
  15. Wed., July 8: a simple heap manager, heap management concepts, error reporting, exit(), introduction to I/O functions, standard I/O streams, opening files
  16. Fri., July 10: review of array/pointer concepts, closing files, character-oriented I/O, line-oriented I/O, scanf() family of functions
  17. Mon., July 13: printf() family, format specifiers, binary I/O, other I/O functions, function pointers, command line arguments, environment and shell variables, string literals, assert(), random variables
  1. Wed., July 15: math functions, time functions, execution environment, timing programs, profiling, testing programs, white box testing
  2. Fri., July 17: line, branch, and path coverage, blackbox testing, testing ideas, character representation, imprecision of floating point numbers
  3. Fri., July 24: system calls, processes, process table, process queues, creating new processes, terminating processes
  4. Mon., July 27: the exec() family of system calls, waiting, a simple shell, I/O redirection, pipes
  5. Wed., July 29: libraries, static libraries, shared libraries, dynamically loaded libraries
  6. Fri., July 31: introduction to program optimization, compiler optimizations, loop unrolling, loop bound checks, further changes
  7. Mon., Aug. 3: more optimizations, spatial and temporal locality, caching, multidimensional arrays in memory, memoization

Web Accessibility