Arrays and Memory Management
Computer Science 61C Spring 2017
Arrays and Memory Management
Friedland and Weaver
1
Pointing to Different Size Objects
Computer Science 61C Spring 2017
? 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 memory address
Friedland and Weaver
? Type declaration tells compiler how many bytes to fetch on each access through pointer
? E.g., 32-bit integer stored in 4 consecutive 8-bit bytes
? But we actually want "word alignment"
? Some processors will not allow you to address 32b values without being on 4 byte boundaries
? Others will just be very slow if you try to access "unaligned" memory.
short *y
int *x
char *z
59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 Byte address
16-bit short stored
32-bit integer stored
8-bit character
in two bytes
in four bytes
stored in one byte
2
sizeof() operator
Computer Science 61C Spring 2017
? sizeof(type) returns number of bytes in object
Friedland and Weaver
? But number of bits in a byte is not standardized
? In olden times, when dragons roamed the earth, bytes could be 5, 6, 7, 9 bits long
? By Standard C99 definition, sizeof(char)==1
? C does not play well with Unicode (unlike Python), so no char c = `'
? Can take sizeof(arg), or sizeof(structtype)
? We'll see more of sizeof when we look at dynamic memory management
? Remember, C does not specify sizeof(int), so you need to ask it whenever
you need to find this out!
3
Pointer Arithmetic
Computer Science 61C Spring 2017
pointer + number pointer ? number
e.g., pointer + 1 adds 1 something to a pointer
char *p; char a; char b;
int *p; int a; int b;
p = &a; p += 1;
In each, p now points to b (Assuming compiler doesn't reorder variables in memory.
Never code like this!!!!)
p = &a; p += 1;
Adds 1*sizeof(char) to the memory address
Adds 1*sizeof(int) to the memory address
Pointer arithmetic should be used cautiously
Friedland and Weaver
4
Valid Pointer Arithmetic
Computer Science 61C Spring 2017
? Add an integer to a pointer.
Friedland and Weaver
? Subtracting an integer from a pointer
? Subtract 2 pointers (in the same array & of the same type)
? Compare pointers (=)
? Compare pointer to NULL (indicates that the pointer points to nothing)
? Everything else illegal since makes no sense:
? adding two pointers
? multiplying pointers
? subtract pointer from integer
5
................
................
In order to avoid copyright disputes, this page is only a partial summary.
To fulfill the demand for quickly locating and searching documents.
It is intelligent file search solution for home and business.
Related download
- table of contents byte by byte
- c input output streams courses
- cs429 computer organization and architecture bits and bytes
- arrays and memory management
- cs221 assembly language fundamentals irvine chapter 3
- arm assembly language guide
- hello pro casper
- basic assembly language i data size home
- data list space 1000 reserves a block of 1000 bytes
- chapter 2 instructions language of the computer
Related searches
- memory management pdf
- stop code memory management windows 10
- memory management tool
- fix memory management windows 10
- memory management unit pdf
- memory management error
- memory management in computer architecture
- stop code memory management windows 10 fix
- memory management software windows 10
- windows 10 memory management crash
- microsoft memory management tool
- memory management blue screen windows 10