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