|
Manual memory management, in computer science, refers to the usage of manual instructions by the programmer in order to identify and deallocate unused objects, or garbage. Up until the mid 1990s, the majority of programming languages used in industry supported manual memory management. As of February 2006, however, languages with garbage collection are becoming increasingly popular; the main manually-managed languages still in widespread use today are C and C++. Computer science is the study of the theoretical foundations of information and computation and their implementation and application in computer systems. ...
It has been suggested that this article or section be merged with Garbage collection (computer science). ...
Computer code (HTML with JavaScript) in a tool that uses syntax highlighting (colors) to help the developer see the purpose of each piece of code. ...
...
In computer science, garbage collection (also known as GC) is a form of automatic memory management. ...
The C Programming Language, Brian Kernighan and Dennis Ritchie, the original edition that served for many years as an informal specification of the language The C programming language is a low-level standardized programming language developed in the early 1970s by Ken Thompson and Dennis Ritchie for use on the...
C++ (generally pronounced see plus plus, IPA: ) is a general-purpose computer programming language. ...
Description All programming languages use manual techniques to determine when to allocate a new object from the free store. C uses the malloc() function; C++ and Java use the new operator; determination of when an object ought to be created is trivial and unproblematic. The fundamental issue is determination of when an object is no longer needed (ie. is garbage), and arranging from its underlying storage to be returned to the free store so that it may be re-used to satisfy future memory requests. In manual memory allocation, this is also specified manually by the programmer; via functions such as free() in C, or the delete operator in C++. Free store is a shop, mostly inspired by anarchist ideas. ...
Manual management and correctness Manual memory management is known to enable several major classes of bugs into a program, when used incorrectly. - When an unused object is never released back to the free store, this is known as a memory leak. In some cases, memory leaks may be tolerable, such as a program which "leaks" a bounded amount of memory over it's lifetime, or a short-running program which relies on an operating system to deallocate it's resources when it terminates. However, in many cases memory leaks occur in long-running programs, and such leaks lose an unbounded amount of memory is leaked. When this occurs, the size of the available free store continues to decrease over time; when it finally is exhausted the program then crashes.
- When an object is deleted more than once, or when the programmer attempts to release a pointer to an object not allocated from the free store, catastrophic failure of the dynamic memory management system can result. The result of such actions can include heap corruption, premature destruction of a different (and newly-created) object which happens to occupy the same location in memory as the multiply-deleted object, and other forms of undefined behavior.
- Pointers to to deleted objects become wild pointers if used post-deletion; attempting to use such pointers can result in difficult-to-diagnose bugs.
Languages which exclusively use garbage collection are known to avoid the last two classes of defects. Memory leaks can still occur (and bounded leaks frequently occur with generational or conservative garbage collection), but are generally less severe than memory leaks in manual systems. A memory leak is unnecessary memory consumption by a computer program. ...
An operating system is a special computer program that manages the relationship between application software, the wide variety of hardware that makes up a computer system, and the user of the system. ...
In computer science, undefined behavior is a feature of some programming languages â most famously C. In these languages, to simplify the specification and allow some flexibility in implementation, the specification leaves the results of certain operations specifically undefined. ...
Wild pointers are pointers that have not been initialized (set to point to a valid address) and can make a program crash and/or behave weird. ...
In computer science, garbage collection (also known as GC) is a form of automatic memory management. ...
Resource acquisition is initialization Manual memory management has one correctness advantage, which comes into play when objects own scarce system resources (like graphics resources, file handles, or database connections) which must be relinquished when an object is destroyed. Languages with manual management, via the use of destructors, can arrange for such actions to occur at the precise time of object destruction; this is known as the resource acquisition is initialization paradigm. In C++, this ability is put to further use to automate memory deallocation within an otherwise-manual framework, use of the auto_ptr template in the language's standard library to perform memory management is a common paradigm. (It should be noted that auto_ptr is not suitable for all object usage patterns). In object-oriented programming, a destructor is a method which is automatically invoked when the object is destroyed. ...
Resource Acquisition Is Initialization (often referred to by the acronym RAII; sometimes also used as Resource Initialization Is Acquisition or as the acronym RIIA) is a popular programming technique in C++ and D. The technique combines acquisition and release of resources with initialization and uninitialization of variables. ...
auto_ptr is a template class available in the C++ Standard Library (declared in <memory>) that provides some basic RAII features for C++ raw pointers. ...
Garbage collected languages have difficulty with this paradigm, as it is difficult to define (or determine) when or if a finalizer method might be called; this is commonly known as the finalizer problem. Java and other GC'd languages frequently use manual management for scarce system resources besides memory (such as graphics resources); any object which manages graphics resources is expected to implement the dispose() method, which releases any such resources and marks the object as inactive. Programmers are expected to invoke dispose() manually as appropriate; in order to prevent "leaking" of scarce graphics resources. Depending on the finalize() method (how Java implements finalizers) to release graphics resources is widely viewed as poor programming practice among Java programmers. In object-oriented programming languages that use automatic garbage collection, a finalizer is a special method that is executed when an object is garbage collected. ...
Performance Many advocates of manual memory management argue that it affords superior performance when compared to automatic techniques such as garbage collection. Manual allocation does not suffer from the long "pause" times often associated with garbage collection (although modern garbage collectors have collection cycles which are often not noticeable), and manual allocation frequently has superior locality of reference. This is especially an issue in real time systems, where unbounded collection cycles are generally unacceptable. In computer science, garbage collection (also known as GC) is a form of automatic memory management. ...
It has been suggested that Real-time computing be merged into this article or section. ...
Manual allocation is also known to be more appropriate for systems where memory is a scarce resource. Memory systems can and do frequently "thrash" as the size of a program's working set approaches the size of available memory; unused objects in a garbage-collected system tend to remain in an un-reclaimed state for longer than in manually-managed systems, increasing the effective working set size. Working set is the set of virtual memory pages currently used by the process. ...
On the other hand, manual management has documented performance disadvantages: - Calls to delete and such incur an overhead each time they are made, this overhead can be amortized in garbage collection cycles. This is especially true of multithreaded applications, where delete calls must be synchronized.
- The allocation routine may be more complicated, and slower. Some garbage collection schemes, such as those with heap compaction, can maintain the free store as a simple array of memory (as opposed to the complicated implementations required by manual management schemes).
Criticism Many computer scientists and software engineers today argue that use of manual memory management (outside of certain "niche" applications) is inappropriate on modern computer systems. This is primarily due to modern software engineering economics in which correct behavior of systems is essential, developer time is expensive, and processor and memory resources are frequently cheap (and getting cheaper all the time). It is argued that the primary motivation of manual memory management--superior performance (a claim which itself is often questioned)--is increasingly irrelevant.
External links - The Memory Management Reference
- Richard Jones and Rafael Lins, Garbage Collection: Algorithms for Automated Dynamic Memory Management, Wiley and Sons (1996), ISBN 0471941484
|