fbpx
Wikipedia

Region-based memory management

In computer science, region-based memory management is a type of memory management in which each allocated object is assigned to a region. A region, also called a zone, arena, area, or memory context, is a collection of allocated objects that can be efficiently reallocated or deallocated all at once. Memory allocators using region-based managements are often called area allocators, and when they work by only "bumping" a single pointer, as bump allocators.

Like stack allocation, regions facilitate allocation and deallocation of memory with low overhead; but they are more flexible, allowing objects to live longer than the stack frame in which they were allocated. In typical implementations, all objects in a region are allocated in a single contiguous range of memory addresses, similarly to how stack frames are typically allocated.

Example edit

As a simple example, consider the following C code which allocates and then deallocates a linked list data structure:

Region *r = createRegion(); ListNode *head = NULL; for (int i = 1; i <= 1000; i++) {  ListNode* newNode = allocateFromRegion(r, sizeof(ListNode));  newNode->next = head;  head = newNode; } // ... // (use list here) // ... destroyRegion(r); 

Although it required many operations to construct the linked list, it can be quickly deallocated in a single operation by destroying the region in which the nodes were allocated. There is no need to traverse the list.

Implementation edit

Simple explicit regions are straightforward to implement; the following description is based on the work of Hanson.[1] Each region is implemented as a linked list of large blocks of memory; each block should be large enough to serve many allocations. The current block maintains a pointer to the next free position in the block, and if the block is filled, a new one is allocated and added to the list. When the region is deallocated, the next-free-position pointer is reset to the beginning of the first block, and the list of blocks can be reused for the next allocated region. Alternatively, when a region is deallocated, its list of blocks can be appended to a global freelist from which other regions may later allocate new blocks. With either case of this simple scheme, it is not possible to deallocate individual objects in regions.

The overall cost per allocated byte of this scheme is very low; almost all allocations involve only a comparison and an update to the next-free-position pointer. Deallocating a region is a constant-time operation, and is done rarely. Unlike in typical garbage collection systems, there is no need to tag data with its type.

History and concepts edit

The basic concept of regions is very old, first appearing as early as 1967 in Douglas T. Ross's AED Free Storage Package, in which memory was partitioned into a hierarchy of zones; each zone had its own allocator, and a zone could be freed all-at-once, making zones usable as regions.[2] In 1976, the PL/I standard included the AREA data type.[3] In 1990, Hanson demonstrated that explicit regions in C (which he called arenas[clarification needed]) could achieve time performance per allocated byte superior to even the fastest-known heap allocation mechanism.[1] Explicit regions were instrumental in the design some early C-based software projects, including the Apache HTTP Server, which calls them pools, and the PostgreSQL database management system, which calls them memory contexts.[4] Like traditional heap allocation, these schemes do not provide memory safety; it is possible for a programmer to access a region after it is deallocated through a dangling pointer, or to forget to deallocate a region, causing a memory leak.

Region inference edit

In 1988, researchers began investigating how to use regions for safe memory allocation by introducing the concept of region inference, where the creation and deallocation of regions, as well as the assignment of individual static allocation expressions to particular regions, is inserted by the compiler at compile-time. The compiler is able to do this in such a way that it can guarantee dangling pointers and leaks do not occur.

In an early work by Ruggieri and Murtagh,[5] a region is created at the beginning of each function and deallocated at the end. They then use data flow analysis to determine a lifetime for each static allocation expression, and assign it to the youngest region that contains its entire lifetime.

In 1994, this work was generalized in a seminal work by Tofte and Talpin to support type polymorphism and higher-order functions in Standard ML, a functional programming language, using a different algorithm based on type inference and the theoretical concepts of polymorphic region types and the region calculus.[6][7] Their work introduced an extension of the lambda calculus including regions, adding two constructs:

e1 at ρ: Compute the result of the expression e1 and store it in region ρ;
letregion ρ in e2 end: Create a region and bind it to ρ; evaluate e2; then deallocate the region.

Due to this syntactic structure, regions are nested, meaning that if r2 is created after r1, it must also be deallocated before r1; the result is a stack of regions. Moreover, regions must be deallocated in the same function in which they are created. These restrictions were relaxed by Aiken et al.[8]

This extended lambda calculus was intended to serve as a provably memory-safe intermediate representation for compiling Standard ML programs into machine code, but building a translator that would produce good results on large programs faced a number of practical limitations which had to be resolved with new analyses, including dealing with recursive calls, tail calls, and eliminating regions which contained only a single value. This work was completed in 1995[9] and integrated into the ML Kit, a version of ML based on region allocation in place of garbage collection. This permitted a direct comparison between the two on medium-sized test programs, yielding widely varying results ("between 10 times faster and four times slower") depending on how "region-friendly" the program was; compile times, however, were on the order of minutes.[10] The ML Kit was eventually scaled to large applications with two additions: a scheme for separate compilation of modules, and a hybrid technique combining region inference with tracing garbage collection.[11][12]

Generalization to new language environments edit

Following the development of ML Kit, regions began to be generalized to other language environments:

  • Various extensions to the C programming language:
    • The safe C dialect Cyclone, which among many other features adds support for explicit regions, and evaluates the impact of migrating existing C applications to use them.[13][14][15]
    • An extension to C called RC[16] was implemented that uses explicitly-managed regions, but also uses reference counting on regions to guarantee memory safety by ensuring that no region is freed prematurely.[17][18] Regions decrease the overhead of reference counting, since references internal to regions don't require counts to be updated when they're modified. RC includes an explicit static type system for regions that allows some reference count updates to be eliminated.[19]
    • A restriction of C called Control-C limits programs to use regions (and only a single region at a time), as part of its design to statically ensure memory safety.[20]
  • Regions were implemented for a subset of Java,[21] and became a critical component of memory management in Real time Java, which combines them with ownership types to demonstrate object encapsulation and eliminate runtime checks on region deallocation.[22][23][24] More recently, a semi-automatic system was proposed for inferring regions in embedded real-time Java applications, combining a compile-time static analysis, a runtime region allocation policy, and programmer hints.[25][26] Regions are a good fit for real-time computing because their time overhead is statically predictable, without the complexity of incremental garbage collection.
  • They were implemented for the logic programming languages Prolog[27][28] and Mercury[29][30] by extending Tofte and Talpin's region inference model to support backtracking and cuts.
  • Region-based storage management is used throughout the parallel programming language ParaSail. Due to the lack of explicit pointers in ParaSail,[31] there is no need for reference counting.

Disadvantages edit

Systems using regions may experience issues where regions become very large before they are deallocated and contain a large proportion of dead data; these are commonly called "leaks" (even though they are eventually freed). Eliminating leaks may involve restructuring the program, typically by introducing new, shorter-lifetime regions. Debugging this type of problem is especially difficult in systems using region inference, where the programmer must understand the underlying inference algorithm, or examine the verbose intermediate representation, to diagnose the issue. Tracing garbage collectors are more effective at deallocating this type of data in a timely manner without program changes; this was one justification for hybrid region/GC systems.[11] On the other hand, tracing garbage collectors can also exhibit subtle leaks, if references are retained to data which will never be used again.

Region-based memory management works best when the number of regions is relatively small and each contains many objects; programs that contain many sparse regions will exhibit internal fragmentation, leading to wasted memory and a time overhead for region management. Again, in the presence of region inference this problem can be more difficult to diagnose.

Hybrid methods edit

As mentioned above, RC uses a hybrid of regions and reference counting, limiting the overhead of reference counting since references internal to regions don't require counts to be updated when they're modified. Similarly, some mark-region hybrid methods combine tracing garbage collection with regions; these function by dividing the heap into regions, performing a mark-sweep pass in which any regions containing live objects are marked, and then freeing any unmarked regions. These require continual defragmentation to remain effective.[32]

References edit

  1. ^ a b Hanson, David R. (1989). "Fast allocation and deallocation of memory based on object lifetimes". Software: Practice and Experience. 20 (1): 5–12. doi:10.1002/spe.4380200104. S2CID 8960945. Archived from the original on 2012-10-20.
  2. ^ Ross, Douglas (1967). "The AED free storage package". Communications of the ACM. 10 (8): 481–492. doi:10.1145/363534.363546. S2CID 6572689.
  3. ^ American National Standards Institute, inc. (1976). American National Standard Programming Language PL/I.
  4. ^ 2010 PostgreSQL Global Development Group (1996). "Section 41.3: Memory Management". PostgreSQL 8.2.15 Documentation. Retrieved 22 February 2010.{{cite web}}: CS1 maint: numeric names: authors list (link)
  5. ^ Ruggieri, Cristina; Murtagh, Thomas P. (1988). "Lifetime analysis of dynamically allocated objects". POPL '88: Proceedings of the 15th ACM SIGPLAN-SIGACT symposium on Principles of programming languages. New York, NY, USA: ACM. doi:10.1145/73560.73585. Retrieved 22 February 2010.
  6. ^ Tofte, Mads; Jean-Pierre Talpin (1993). A Theory of Stack Allocation in Polymorphically Typed Languages (Technical report). Department of Computer Science, Copenhagen University. 93/15. On Citeseer
  7. ^ Tofte, Mads; Talpin, Jean-Pierre (1994). "Implementation of the Typed Call-by-Value λ-calculus using a Stack of Regions". POPL '94: Proceedings of the 21st ACM SIGPLAN-SIGACT symposium on Principles of programming languages. New York, NY, USA: ACM. pp. 188–201. doi:10.1145/174675.177855. ISBN 0-89791-636-0. Retrieved 15 April 2014.
  8. ^ Aiken, Alex; Manuel Fähndrich, Raph Levien (1995). Better Static Memory Management: Improving Region-Based Analysis of Higher-Order Languages (Technical report). EECS Department, University of California, Berkeley. UCB/CSD-95-866. On Citeseer
  9. ^ Birkedal, Lars; Tofte, Mads; Vejlstrup, Magnus (1996). "From region inference to von Neumann machines via region representation inference". POPL '96: Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages. New York, NY, USA: ACM. pp. 171–183. doi:10.1145/237721.237771. ISBN 0-89791-769-3. Retrieved 22 February 2010.
  10. ^ Tofte, Mads; Birkedal, Lars; Elsman, Martin; Hallenberg, Niels (2004). "A Retrospective on Region-Based Memory Management". Higher Order Symbolic Computing. 17 (3): 245–265. doi:10.1023/B:LISP.0000029446.78563.a4. ISSN 1388-3690.
  11. ^ a b Hallenberg, Niels; Elsman, Martin; Tofte, Mads (2003). "Combining region inference and garbage collection". SIGPLAN Notices. 37 (5): 141–152. doi:10.1145/543552.512547. ISSN 0362-1340.
  12. ^ Elsman, Martin (2003). "Garbage collection safety for region-based memory management". SIGPLAN Notices. 38 (3): 123–134. CiteSeerX 10.1.1.57.8914. doi:10.1145/640136.604190. ISSN 0362-1340.
  13. ^ "Cyclone: Introduction to Regions". Cyclone User Manual. Retrieved 22 February 2010.
  14. ^ Grossman, Dan; Morrisett, Greg; Jim, Trevor; Hicks, Michael; Wang, Yanling (2002). "Region-based memory management in cyclone". SIGPLAN Notices. 37 (5): 282–293. doi:10.1145/543552.512563.
  15. ^ Hicks, Michael; Morrisett, Greg; Grossman, Dan (2004). "Experience with safe manual memory-management in cyclone". ISMM '04: Proceedings of the 4th international symposium on Memory management. New York, NY, USA: ACM. pp. 73–84. doi:10.1145/1029873.1029883. ISBN 1-58113-945-4. Retrieved 22 February 2010.
  16. ^ Gay, David (1999). . David Gay's homepage. Intel Labs Berkeley. Archived from the original on February 26, 2009. Retrieved 22 February 2010.
  17. ^ Gay, David; Aiken, Alex (1998). "Memory management with explicit regions". PLDI '98: Proceedings of the ACM SIGPLAN 1998 conference on Programming language design and implementation. New York, NY, USA: ACM. pp. 313–323. doi:10.1145/277650.277748. ISBN 0-89791-987-4. Retrieved 22 February 2010.
  18. ^ Gay, David Edward (2001). Memory management with explicit regions (PDF) (PhD in Computer Science thesis). University of California at Berkeley. Retrieved 20 February 2010.
  19. ^ Gay, David; Aiken, Alex (2001). "Language support for regions". SIGPLAN Notices. 36 (5): 70–80. CiteSeerX 10.1.1.650.721. doi:10.1145/381694.378815. ISSN 0362-1340.
  20. ^ Kowshik, Sumant; Dhurjati, Dinakar; Adve, Vikram (2002). "Ensuring code safety without runtime checks for real-time control systems". CASES '02: Proceedings of the 2002 international conference on Compilers, architecture, and synthesis for embedded systems. New York, NY, USA: ACM. pp. 288–297. doi:10.1145/581630.581678. ISBN 1-58113-575-0. Retrieved 22 February 2010.
  21. ^ Christiansen, Morten V. (1998). Region-based memory management in Java (Masters in Computer Science thesis). Department of Computer Science (DIKU), University of Copenhagen. Retrieved 20 February 2010.[permanent dead link]
  22. ^ Beebee, William S.; Rinard, Martin C. (2001). "An Implementation of Scoped Memory for Real-Time Java". EMSOFT '01: Proceedings of the First International Workshop on Embedded Software. London, UK: Springer-Verlag. pp. 289–305. ISBN 3-540-42673-6. Retrieved 22 February 2010.[permanent dead link]
  23. ^ Sălcianu, Alexandru; Chandrasekhar Boyapati, William Beebee, Jr., Martin Rinard (2003). A type system for safe region-based memory management in Real-Time Java (PDF) (Technical report). MIT Laboratory for Computer Science. MIT-LCS-TR-869.{{cite tech report}}: CS1 maint: multiple names: authors list (link)
  24. ^ Boyapati, Chandrasekhar; Salcianu, Alexandru; Beebee, William Jr. (2003). "Ownership types for safe region-based memory management in real-time Java". PLDI '03: Proceedings of the ACM SIGPLAN 2003 conference on Programming language design and implementation. New York, NY, USA: ACM. pp. 324–337. doi:10.1145/781131.781168. ISBN 1-58113-662-5. Retrieved 22 February 2010.
  25. ^ Nahkli, Chaker; Rippert, Christophe; Salagnac, Guillaume; Yovine, Sergio (2007). "Efficient region-based memory management for resource-limited real-time embedded systems" (PDF). Proceedings of "Workshop on Implementation, Compilation, Optimization of Object-Oriented Languages, Programs and Systems (ICOOOLPS'2006)". Retrieved 22 February 2010.
  26. ^ Salagnac, Guillaume; Rippert, Christophe (2007). "Semi-Automatic Region-Based Memory Management for Real-Time Java Embedded Systems". RTCSA '07: Proceedings of the 13th IEEE International Conference on Embedded and Real-Time Computing Systems and Applications. Washington, DC, USA: IEEE Computer Society. pp. 73–80. doi:10.1109/RTCSA.2007.67. ISBN 978-0-7695-2975-2.
  27. ^ Makholm, Henning (2000). (PDF) (Masters in Computer Science thesis). University of Copenhagen, Denmark. Archived from the original (PDF) on 5 June 2011. Retrieved 20 February 2010.
  28. ^ Makholm, Henning (2000). "A region-based memory manager for prolog". ISMM '00: Proceedings of the 2nd international symposium on Memory management. New York, NY, USA: ACM. pp. 25–34. doi:10.1145/362422.362434. ISBN 1-58113-263-8. Retrieved 22 February 2010.
  29. ^ Phan, Quan; Janssens, Gerda (2007). Logic Programming. Lecture Notes in Computer Science. Vol. 4670/2007. Springer Berlin / Heidelberg. pp. 317–332. doi:10.1007/978-3-540-74610-2. ISBN 978-3-540-74608-9. ISSN 1611-3349.
  30. ^ Phan, Quan; Somogyi, Zoltan (2008). "Runtime support for region-based memory management in Mercury". ISMM '08: Proceedings of the 7th international symposium on Memory management. New York, NY, USA: ACM. pp. 61–70. doi:10.1145/1375634.1375644. ISBN 978-1-60558-134-7. Retrieved 15 April 2014.
  31. ^ Taft, Tucker (2012). "A Pointer-Free path to Object Oriented Parallel Programming". ParaSail blog. Retrieved 14 September 2012.
  32. ^ Blackburn, Stephen M.; McKinley, Kathryn S. (2008). "Immix: a mark-region garbage collector with space efficiency, fast collection, and mutator performance". PLDI '08: Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation. New York, NY, USA: ACM. pp. 22–32. doi:10.1145/1375581.1375586. ISBN 978-1-59593-860-2. Retrieved 15 April 2014.

region, based, memory, management, computer, science, region, based, memory, management, type, memory, management, which, each, allocated, object, assigned, region, region, also, called, zone, arena, area, memory, context, collection, allocated, objects, that,. In computer science region based memory management is a type of memory management in which each allocated object is assigned to a region A region also called a zone arena area or memory context is a collection of allocated objects that can be efficiently reallocated or deallocated all at once Memory allocators using region based managements are often called area allocators and when they work by only bumping a single pointer as bump allocators Like stack allocation regions facilitate allocation and deallocation of memory with low overhead but they are more flexible allowing objects to live longer than the stack frame in which they were allocated In typical implementations all objects in a region are allocated in a single contiguous range of memory addresses similarly to how stack frames are typically allocated Contents 1 Example 2 Implementation 3 History and concepts 3 1 Region inference 3 2 Generalization to new language environments 4 Disadvantages 5 Hybrid methods 6 ReferencesExample editAs a simple example consider the following C code which allocates and then deallocates a linked list data structure Region r createRegion ListNode head NULL for int i 1 i lt 1000 i ListNode newNode allocateFromRegion r sizeof ListNode newNode gt next head head newNode use list here destroyRegion r Although it required many operations to construct the linked list it can be quickly deallocated in a single operation by destroying the region in which the nodes were allocated There is no need to traverse the list Implementation editSimple explicit regions are straightforward to implement the following description is based on the work of Hanson 1 Each region is implemented as a linked list of large blocks of memory each block should be large enough to serve many allocations The current block maintains a pointer to the next free position in the block and if the block is filled a new one is allocated and added to the list When the region is deallocated the next free position pointer is reset to the beginning of the first block and the list of blocks can be reused for the next allocated region Alternatively when a region is deallocated its list of blocks can be appended to a global freelist from which other regions may later allocate new blocks With either case of this simple scheme it is not possible to deallocate individual objects in regions The overall cost per allocated byte of this scheme is very low almost all allocations involve only a comparison and an update to the next free position pointer Deallocating a region is a constant time operation and is done rarely Unlike in typical garbage collection systems there is no need to tag data with its type History and concepts editThe basic concept of regions is very old first appearing as early as 1967 in Douglas T Ross s AED Free Storage Package in which memory was partitioned into a hierarchy of zones each zone had its own allocator and a zone could be freed all at once making zones usable as regions 2 In 1976 the PL I standard included the AREA data type 3 In 1990 Hanson demonstrated that explicit regions in C which he called arenas clarification needed could achieve time performance per allocated byte superior to even the fastest known heap allocation mechanism 1 Explicit regions were instrumental in the design some early C based software projects including the Apache HTTP Server which calls them pools and the PostgreSQL database management system which calls them memory contexts 4 Like traditional heap allocation these schemes do not provide memory safety it is possible for a programmer to access a region after it is deallocated through a dangling pointer or to forget to deallocate a region causing a memory leak Region inference edit In 1988 researchers began investigating how to use regions for safe memory allocation by introducing the concept of region inference where the creation and deallocation of regions as well as the assignment of individual static allocation expressions to particular regions is inserted by the compiler at compile time The compiler is able to do this in such a way that it can guarantee dangling pointers and leaks do not occur In an early work by Ruggieri and Murtagh 5 a region is created at the beginning of each function and deallocated at the end They then use data flow analysis to determine a lifetime for each static allocation expression and assign it to the youngest region that contains its entire lifetime In 1994 this work was generalized in a seminal work by Tofte and Talpin to support type polymorphism and higher order functions in Standard ML a functional programming language using a different algorithm based on type inference and the theoretical concepts of polymorphic region types and the region calculus 6 7 Their work introduced an extension of the lambda calculus including regions adding two constructs e1 at r Compute the result of the expression e1 and store it in region r letregion r in e2 end Create a region and bind it to r evaluate e2 then deallocate the region Due to this syntactic structure regions are nested meaning that if r2 is created after r1 it must also be deallocated before r1 the result is a stack of regions Moreover regions must be deallocated in the same function in which they are created These restrictions were relaxed by Aiken et al 8 This extended lambda calculus was intended to serve as a provably memory safe intermediate representation for compiling Standard ML programs into machine code but building a translator that would produce good results on large programs faced a number of practical limitations which had to be resolved with new analyses including dealing with recursive calls tail calls and eliminating regions which contained only a single value This work was completed in 1995 9 and integrated into the ML Kit a version of ML based on region allocation in place of garbage collection This permitted a direct comparison between the two on medium sized test programs yielding widely varying results between 10 times faster and four times slower depending on how region friendly the program was compile times however were on the order of minutes 10 The ML Kit was eventually scaled to large applications with two additions a scheme for separate compilation of modules and a hybrid technique combining region inference with tracing garbage collection 11 12 Generalization to new language environments edit Following the development of ML Kit regions began to be generalized to other language environments Various extensions to the C programming language The safe C dialect Cyclone which among many other features adds support for explicit regions and evaluates the impact of migrating existing C applications to use them 13 14 15 An extension to C called RC 16 was implemented that uses explicitly managed regions but also uses reference counting on regions to guarantee memory safety by ensuring that no region is freed prematurely 17 18 Regions decrease the overhead of reference counting since references internal to regions don t require counts to be updated when they re modified RC includes an explicit static type system for regions that allows some reference count updates to be eliminated 19 A restriction of C called Control C limits programs to use regions and only a single region at a time as part of its design to statically ensure memory safety 20 Regions were implemented for a subset of Java 21 and became a critical component of memory management in Real time Java which combines them with ownership types to demonstrate object encapsulation and eliminate runtime checks on region deallocation 22 23 24 More recently a semi automatic system was proposed for inferring regions in embedded real time Java applications combining a compile time static analysis a runtime region allocation policy and programmer hints 25 26 Regions are a good fit for real time computing because their time overhead is statically predictable without the complexity of incremental garbage collection They were implemented for the logic programming languages Prolog 27 28 and Mercury 29 30 by extending Tofte and Talpin s region inference model to support backtracking and cuts Region based storage management is used throughout the parallel programming language ParaSail Due to the lack of explicit pointers in ParaSail 31 there is no need for reference counting Disadvantages editSystems using regions may experience issues where regions become very large before they are deallocated and contain a large proportion of dead data these are commonly called leaks even though they are eventually freed Eliminating leaks may involve restructuring the program typically by introducing new shorter lifetime regions Debugging this type of problem is especially difficult in systems using region inference where the programmer must understand the underlying inference algorithm or examine the verbose intermediate representation to diagnose the issue Tracing garbage collectors are more effective at deallocating this type of data in a timely manner without program changes this was one justification for hybrid region GC systems 11 On the other hand tracing garbage collectors can also exhibit subtle leaks if references are retained to data which will never be used again Region based memory management works best when the number of regions is relatively small and each contains many objects programs that contain many sparse regions will exhibit internal fragmentation leading to wasted memory and a time overhead for region management Again in the presence of region inference this problem can be more difficult to diagnose Hybrid methods editAs mentioned above RC uses a hybrid of regions and reference counting limiting the overhead of reference counting since references internal to regions don t require counts to be updated when they re modified Similarly some mark region hybrid methods combine tracing garbage collection with regions these function by dividing the heap into regions performing a mark sweep pass in which any regions containing live objects are marked and then freeing any unmarked regions These require continual defragmentation to remain effective 32 References edit a b Hanson David R 1989 Fast allocation and deallocation of memory based on object lifetimes Software Practice and Experience 20 1 5 12 doi 10 1002 spe 4380200104 S2CID 8960945 Archived from the original on 2012 10 20 Ross Douglas 1967 The AED free storage package Communications of the ACM 10 8 481 492 doi 10 1145 363534 363546 S2CID 6572689 American National Standards Institute inc 1976 American National Standard Programming Language PL I 2010 PostgreSQL Global Development Group 1996 Section 41 3 Memory Management PostgreSQL 8 2 15 Documentation Retrieved 22 February 2010 a href Template Cite web html title Template Cite web cite web a CS1 maint numeric names authors list link Ruggieri Cristina Murtagh Thomas P 1988 Lifetime analysis of dynamically allocated objects POPL 88 Proceedings of the 15th ACM SIGPLAN SIGACT symposium on Principles of programming languages New York NY USA ACM doi 10 1145 73560 73585 Retrieved 22 February 2010 Tofte Mads Jean Pierre Talpin 1993 A Theory of Stack Allocation in Polymorphically Typed Languages Technical report Department of Computer Science Copenhagen University 93 15 On Citeseer Tofte Mads Talpin Jean Pierre 1994 Implementation of the Typed Call by Value l calculus using a Stack of Regions POPL 94 Proceedings of the 21st ACM SIGPLAN SIGACT symposium on Principles of programming languages New York NY USA ACM pp 188 201 doi 10 1145 174675 177855 ISBN 0 89791 636 0 Retrieved 15 April 2014 Aiken Alex Manuel Fahndrich Raph Levien 1995 Better Static Memory Management Improving Region Based Analysis of Higher Order Languages Technical report EECS Department University of California Berkeley UCB CSD 95 866 On Citeseer Birkedal Lars Tofte Mads Vejlstrup Magnus 1996 From region inference to von Neumann machines via region representation inference POPL 96 Proceedings of the 23rd ACM SIGPLAN SIGACT symposium on Principles of programming languages New York NY USA ACM pp 171 183 doi 10 1145 237721 237771 ISBN 0 89791 769 3 Retrieved 22 February 2010 Tofte Mads Birkedal Lars Elsman Martin Hallenberg Niels 2004 A Retrospective on Region Based Memory Management Higher Order Symbolic Computing 17 3 245 265 doi 10 1023 B LISP 0000029446 78563 a4 ISSN 1388 3690 a b Hallenberg Niels Elsman Martin Tofte Mads 2003 Combining region inference and garbage collection SIGPLAN Notices 37 5 141 152 doi 10 1145 543552 512547 ISSN 0362 1340 Elsman Martin 2003 Garbage collection safety for region based memory management SIGPLAN Notices 38 3 123 134 CiteSeerX 10 1 1 57 8914 doi 10 1145 640136 604190 ISSN 0362 1340 Cyclone Introduction to Regions Cyclone User Manual Retrieved 22 February 2010 Grossman Dan Morrisett Greg Jim Trevor Hicks Michael Wang Yanling 2002 Region based memory management in cyclone SIGPLAN Notices 37 5 282 293 doi 10 1145 543552 512563 Hicks Michael Morrisett Greg Grossman Dan 2004 Experience with safe manual memory management in cyclone ISMM 04 Proceedings of the 4th international symposium on Memory management New York NY USA ACM pp 73 84 doi 10 1145 1029873 1029883 ISBN 1 58113 945 4 Retrieved 22 February 2010 Gay David 1999 RC Safe region based memory management for C David Gay s homepage Intel Labs Berkeley Archived from the original on February 26 2009 Retrieved 22 February 2010 Gay David Aiken Alex 1998 Memory management with explicit regions PLDI 98 Proceedings of the ACM SIGPLAN 1998 conference on Programming language design and implementation New York NY USA ACM pp 313 323 doi 10 1145 277650 277748 ISBN 0 89791 987 4 Retrieved 22 February 2010 Gay David Edward 2001 Memory management with explicit regions PDF PhD in Computer Science thesis University of California at Berkeley Retrieved 20 February 2010 Gay David Aiken Alex 2001 Language support for regions SIGPLAN Notices 36 5 70 80 CiteSeerX 10 1 1 650 721 doi 10 1145 381694 378815 ISSN 0362 1340 Kowshik Sumant Dhurjati Dinakar Adve Vikram 2002 Ensuring code safety without runtime checks for real time control systems CASES 02 Proceedings of the 2002 international conference on Compilers architecture and synthesis for embedded systems New York NY USA ACM pp 288 297 doi 10 1145 581630 581678 ISBN 1 58113 575 0 Retrieved 22 February 2010 Christiansen Morten V 1998 Region based memory management in Java Masters in Computer Science thesis Department of Computer Science DIKU University of Copenhagen Retrieved 20 February 2010 permanent dead link Beebee William S Rinard Martin C 2001 An Implementation of Scoped Memory for Real Time Java EMSOFT 01 Proceedings of the First International Workshop on Embedded Software London UK Springer Verlag pp 289 305 ISBN 3 540 42673 6 Retrieved 22 February 2010 permanent dead link Sălcianu Alexandru Chandrasekhar Boyapati William Beebee Jr Martin Rinard 2003 A type system for safe region based memory management in Real Time Java PDF Technical report MIT Laboratory for Computer Science MIT LCS TR 869 a href Template Cite tech report html title Template Cite tech report cite tech report a CS1 maint multiple names authors list link Boyapati Chandrasekhar Salcianu Alexandru Beebee William Jr 2003 Ownership types for safe region based memory management in real time Java PLDI 03 Proceedings of the ACM SIGPLAN 2003 conference on Programming language design and implementation New York NY USA ACM pp 324 337 doi 10 1145 781131 781168 ISBN 1 58113 662 5 Retrieved 22 February 2010 Nahkli Chaker Rippert Christophe Salagnac Guillaume Yovine Sergio 2007 Efficient region based memory management for resource limited real time embedded systems PDF Proceedings of Workshop on Implementation Compilation Optimization of Object Oriented Languages Programs and Systems ICOOOLPS 2006 Retrieved 22 February 2010 Salagnac Guillaume Rippert Christophe 2007 Semi Automatic Region Based Memory Management for Real Time Java Embedded Systems RTCSA 07 Proceedings of the 13th IEEE International Conference on Embedded and Real Time Computing Systems and Applications Washington DC USA IEEE Computer Society pp 73 80 doi 10 1109 RTCSA 2007 67 ISBN 978 0 7695 2975 2 Makholm Henning 2000 Region based memory management in Prolog PDF Masters in Computer Science thesis University of Copenhagen Denmark Archived from the original PDF on 5 June 2011 Retrieved 20 February 2010 Makholm Henning 2000 A region based memory manager for prolog ISMM 00 Proceedings of the 2nd international symposium on Memory management New York NY USA ACM pp 25 34 doi 10 1145 362422 362434 ISBN 1 58113 263 8 Retrieved 22 February 2010 Phan Quan Janssens Gerda 2007 Logic Programming Lecture Notes in Computer Science Vol 4670 2007 Springer Berlin Heidelberg pp 317 332 doi 10 1007 978 3 540 74610 2 ISBN 978 3 540 74608 9 ISSN 1611 3349 Phan Quan Somogyi Zoltan 2008 Runtime support for region based memory management in Mercury ISMM 08 Proceedings of the 7th international symposium on Memory management New York NY USA ACM pp 61 70 doi 10 1145 1375634 1375644 ISBN 978 1 60558 134 7 Retrieved 15 April 2014 Taft Tucker 2012 A Pointer Free path to Object Oriented Parallel Programming ParaSail blog Retrieved 14 September 2012 Blackburn Stephen M McKinley Kathryn S 2008 Immix a mark region garbage collector with space efficiency fast collection and mutator performance PLDI 08 Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation New York NY USA ACM pp 22 32 doi 10 1145 1375581 1375586 ISBN 978 1 59593 860 2 Retrieved 15 April 2014 Retrieved from https en wikipedia org w index php title Region based memory management amp oldid 1216087355 Region inference, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.