function pointers refined memory model
play

Function Pointers Refined Memory Model 1 The C0 Memory Model so - PowerPoint PPT Presentation

Function Pointers Refined Memory Model 1 The C0 Memory Model so far Local Memory Allocated Memory Two memories main A apple 20 Local memory H o one frame per function call 5 3 pumpkin 10 o frame contains hdict_lookup


  1. Function Pointers

  2. Refined Memory Model 1

  3. The C0 Memory Model … so far Local Memory Allocated Memory Two memories main A “apple” 20  Local memory H o one frame per function call 5 3 “pumpkin” 10 o frame contains hdict_lookup 0  its parameters H 1  its local variables 2 k “lime” 3  Allocated memory i 4 1 “banana” 50 o arrays key_hash o pointer targets k “lime” Sample memory snapshot during the execution of an application that uses a hash dictionary 2

  4. 0xFFFFFFFFFFFFFFFF A More Realistic Model  Two distinct memories?  local memory and allocated memory  But a computer has one memory o a large array of bytes indexed by Computer addresses memory  C0 addresses are 64 bit long  2 64 bytes o the smallest byte has address 0x0000000000000000 o the largest byte has address 0xFFFFFFFFFFFFFFFF This is 2 64 -1 0x0000000000000000 3

  5. 0xFF…FF A More Realistic Model main A 0xBB8 H 0xD04 hdict_lookup H 0xD04 Local  Local and allocated memory are k “lime” memory i 1 two segments in this memory key_hash k “lime” Local Memory Allocated Memory 0xBB8 main “apple” 20 0xD04 “apple” 20 A 5 3 “pumpkin” 10 Allocated 0 H 5 3 1 “pumpkin” 10 memory 2 hdict_lookup 3 0 H 4 “banana” 50 1 “lime” k 2 i 1 3 4 key_hash “banana” 50 “lime” k 0x0 4

  6. 0xFF…FF A More Realistic Model  The segment where the allocated memory lives is called the heap o it contains a pile of data structures Allocated Memory 0xBB8 “apple” 20 0xD04 5 3 “apple” 20 “pumpkin” 10 Allocated The 0 1 memory HEAP 5 3 Local Memory 2 “pumpkin” 10 3 4 “banana” 50 0 1 2 3 4 “banana” 50 0x0 5

  7. 0xFF…FF A More Realistic Model main A 0xBB8 H 0xD04 hdict_lookup H The 0xD04 Local  The segment where the k “lime” memory STACK i 1 local memory lives is key_hash k “lime” called the stack o function calls make it grow and shrink Local Memory 0xBB8 like a stack “apple” 20 0xD04 main 5 3 A 0xBB8 “pumpkin” 10 Allocated Memory Allocated The 0 1 memory H 0xD08 HEAP 2 3 hdict_lookup 4 “banana” 50 H “lime” k i 1 key_hash “lime” k 0x0 6

  8. 0xFF…FF A More Realistic Model main A 0xBB8 H 0xD04 hdict_lookup H The 0xD04 Local  The stack grows downward k “lime” memory STACK i 1 o toward smaller addresses key_hash k “lime”  The heap grows upward o toward larger addresses  unless garbage collection has given back existing heap space 0xBB8 “apple” 20 0xD04 5 3  If they grow so much that they “pumpkin” 10 Allocated The 0 1 memory HEAP run into each other, we have a 2 3 stack overflow 4 “banana” 50  very rare with modern hardware o What about the rest of memory? 0x0 7

  9. 0xFF…FF OS Restricted A More Realistic Model main A 0xBB8 H 0xD04 hdict_lookup H The 0xD04 Local  The top and bottom segments k “lime” memory STACK i 1 belong to the operating system key_hash k “lime”  A C0 program cannot use them  it cannot read or write there o This is restricted memory 0xBB8 o accessing it causes a “apple” 20 0xD04 5 3 “pumpkin” 10 segmentation fault Allocated The 0 1 memory HEAP 2 3  NULL is address 4 “banana” 50 0x0000000000000000 o a valid address that doesn’t What about this area? belong to the program  This is why dereferencing NULL causes a segmentation fault OS Restricted NULL 0x0 8

  10. 0xFF…FF OS Restricted A More Realistic Model main A 0xBB8 H 0xD04 hdict_lookup H The 0xD04 Local  The CODE segment contains k “lime” memory STACK i 1 the compiled code of the key_hash k “lime” program Well, it’s got to live somewhere! 0xBB8 “apple” 20 o every function has an address in 0xD04 5 3 “pumpkin” 10 Allocated The memory 0 1 memory HEAP  the beginning of its binary 2 3 4 “banana” 50 What about this area?  This segment is read-only main … o writing to it causes a hdict_lookup … CODE Read-only key_hash … segmentation fault key_equiv … … OS Restricted 0x0 9

  11. 0xFF…FF OS Restricted A More Realistic Model main A 0xBB8 H 0xD04 hdict_lookup H The 0xD04 Local  The TEXT segment contains k 0x0AC memory STACK i 1 all the string literals present in key_hash k 0x0AC the program o not the strings constructed by functions like string_join  those are hidden in the heap 0xBB8 o every string has an address in 0x080 20 0xD04 5 3 0x090 10 memory Allocated The 0 1 memory  the address of its first character HEAP 2 3  variables and fields of type string 4 0x088 50 contain this address TEXT “apple” … Read-only “lime” … 0x0AC main …  This segment is read-only hdict_lookup … CODE Read-only key_hash … key_equiv … … Writing to it causes TEXT and CODE are a segmentation fault sometimes viewed as OS Restricted one segment called TEXT 0x0 10

  12. 0xFF…FF OS Restricted A More Realistic Model main A 0xBB8 H 0xD04 hdict_lookup H The 0xD04 Local k 0x0AC memory STACK i 1 key_hash k 0x0AC  This is not the end of the story!  Actual memory is much more complicated 0xBB8 0x080 20 0xD04 o This model will be significantly 5 3 0x090 10 Allocated The 0 refined in future classes 1 memory HEAP 2 3 4 0x088 50 TEXT “apple” … Read-only “lime” … 0x0AC Hint: no computer in existence main … comes even close to having hdict_lookup … CODE 2 64 bytes of memory! Read-only key_hash … key_equiv … … OS Restricted 0x0 11

  13. Function Pointers 12

  14. Addresses a C0 Program can Use  The address of an array o returned by alloc_array  The address of a memory cell o returned by alloc  NULL  that’s just address 0x00000000 o but we can’t dereference it  The address of a string o but C0 hides that they are even addresses … and that’s it 13

  15. Addresses a C1 Program can Use  Everything a C0 program can use o the address of an array o the address of a memory cell o NULL o the address of a string  The address of a function o this is called a function pointer 14

  16. The language C1  C1 is an extension of C0 o Every C0 program is a C1 program  C1 provides two additional mechanisms o Generic pointers o Function pointers Rest of this unit Both help with genericity 15

  17. 0xFF…FF OS The Address of a Function main A 0xBB8 H 0xD04 hdict_lookup H The 0xD04  C1 provides the address-of operator k 0x0AC STACK i 1 to grab the address of a function key_hash k 0x0AC o written “&”, prefix  If key_hash starts at address 0x02A in the CODE segment, then 0xBB8 0x080 20 0xD04 5 3 &key_hash 0x090 10 The 0 1 returns the address 0x02A HEAP 2 3 o & can only be applied to the name of a 4 0x088 50 TEXT “apple” … function in a C1 program “lime” … 0x0AC main … CODE hdict_lookup … C and other languages key_hash … 0x02A have many more uses key_equiv … for & … OS 0x0 16

  18. What to do with a Function Pointer?  Eventually, we want to apply the function it points to to some arguments  But first, we generally store a function pointer o in a variable F = &key_hash;  F is a variable containing a function pointer  what is its type?  all C0/C1 variables have a type o but also in a data structure p->hash = &key_hash;  p->hash is a field containing a function pointer  what is its type?  struct fields, array elements, memory cells have a type in C0/C1 17

  19. Function Types  key_hash is a function that takes int key_hash(string s) { int len = string_length(s); a string as input and returns an int int h = 0; for (int i = 0; i < len; i++) { h = h + char_ord(string_charat(s, i));  To give the name string_to_int_fn h = 1664525 * h + 1013904223; } to the type of the functions that return h; take a string as input and return } an int, we write typedef int string_to_int_fn (string s); Return type Type of the parameter Name chosen for the function type o thus, key_hash has type string_to_int_fn o and so does the <string> library function string_length 18

  20. int key_hash(string s) { int len = string_length(s); Function Types int h = 0; for (int i = 0; i < len; i++) { h = h + char_ord(string_charat(s, i)); h = 1664525 * h + 1013904223; } return h; typedef int string_to_int_fn (string s); } Return type Type of the parameter Name chosen for the function type o by convention, function types end in _fn  like types exported by a library interface end in _t o This is a different use of typedef from what we had in the past  Function types are not functions o we cannot write string_to_int_fn("hello")  We can give a function type any name we want typedef int string_hash_fn(string s); 19

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend