Memory organization and usage A computer’s memory is, at its lowest level, composed of binary digits (bits). The memory is organized into bytes, which are groups of eight bits. Each byte has a unique address in memory. A byte is the smallest addressable unit of memory (i.e. nothing smaller than a byte has its own address)
Memory organization Table at right shows 16 bytes, each consisting of 8 bits Each byte has an address, shown in the column to the left
Memory organization Process BProcess AProcess C
Memory organization Process BProcess AProcess C STATIC SEGMENT RUNTIME STACK FREE/AVAILABLE MEMORY HEAP dynamically allocated memory
Memory organization STATIC SEGMENT RUNTIME STACK FREE/AVAILABLE MEMORY HEAP main(){…methodA()…} methodA(){…methodB()…} methodB() { …methodC()…} methodC(){…} main()
Memory organization STATIC SEGMENT RUNTIME STACK FREE/AVAILABLE MEMORY HEAP main(){…methodA()…} methodA(){…methodB()…} methodB() { …methodC()…} methodC(){…} main()methodA()
Memory organization STATIC SEGMENT RUNTIME STACK FREE/AVAILABLE MEMORY HEAP main(){…methodA()…} methodA(){…methodB()…} methodB() { …methodC()…} methodC(){…} main()methodA()methodB()
Memory organization STATIC SEGMENT RUNTIME STACK FREE/AVAILABLE MEMORY HEAP main(){…methodA()…} methodA(){…methodB()…} methodB() { …methodC()…} methodC(){…} main()methodA()methodB()methodC()
Memory organization STATIC SEGMENT RUNTIME STACK FREE/AVAILABLE MEMORY HEAP main(){…methodA()…} methodA(){…methodB()…} methodB() { …methodC()…} methodC(){…} main()methodA()methodB()
Memory organization STATIC SEGMENT RUNTIME STACK FREE/AVAILABLE MEMORY HEAP main(){…methodA()…} methodA(){…methodB()…} methodB() { …methodC()…} methodC(){…} main()methodA()
Memory organization STATIC SEGMENT RUNTIME STACK FREE/AVAILABLE MEMORY HEAP main(){…methodA()…} methodA(){…methodB()…} methodB() { …methodC()…} methodC(){…} main()
Memory organization Table at right shows 16 bytes, each consisting of 8 bits Each byte has an address, shown in the column to the left
Arrays A collection of variables, all of the same type. Each variable in an array is accessed by an index. An array of size n has indices from 0 to n-1. An array occupies a contiguous block of memory. The size of an array is fixed at creation time.
Accessing an array member t type of elements in array s size (in bytes) of an element of type t b base address of array address of element i is b + i * s
Array access example In Java, an int occupies 4 bytes: int [] a = new int[5]; The base address of ‘a’ is Indices are 0, 1, 2, 3 and 4. Total size needed for array is 20 bytes (5 cells times 4 bytes per cell)
Array access example Where is a[0]? Address of a[0] is: b + s * i where b = , s = 4 and i = 0: * 0 = a[0] occupies bytes , , and a[0]
Array access example Where is a[3]? Address of a[3] is: b + s * i where b = , s = 4 and i = 3: * 3 = a[3] occupies bytes , , and a[3]
Array access example Where is a[7]? There is no such array cell, so what happens if we try to access it? In some languages (e.g. C and C++) the access is permitted, with unpredictable results. Java throws an ArrayIndexOutOfBoundsException