, memory is a device or system that is used to store information for immediate use in a computer
or related computer hardware
and digital electronic
The term ''memory'' is often synonymous with the term ''primary storage
'' or ''main memory
''. An archaic synonym for memory is store.
Computer memory operates at a high speed compared to storage
that is slower but offers higher capacities. If needed, contents of the computer memory can be transferred to storage; a common way of doing this is through a memory management technique called ''virtual memory
Modern memory is implemented as semiconductor memory
, where data is stored within memory cells
built from MOS transistor
s on an integrated circuit
There are two main kinds of semiconductor memory, volatile
. Examples of non-volatile memory
are flash memory
memory. Examples of volatile memory
are primary storage, which is typically dynamic random-access memory
(DRAM), and fast CPU cache
memory, which is typically static random-access memory
(SRAM) that is fast but energy-consuming, offering lower memory areal density
Most semiconductor memory is organized into memory cells
or bistable flip-flop
s, each storing one bit
(0 or 1). Flash memory
organization includes both one bit per memory cell and multiple bits per cell (called MLC, Multiple Level Cell). The memory cells are grouped into words of fixed word length
, for example 1, 2, 4, 8, 16, 32, 64 or 128 bit. Each word can be accessed by a binary address of ''N'' bit, making it possible to store 2 raised by ''N'' words in the memory. This implies that processor register
s normally are not considered as memory, since they only store one word and do not include an addressing mechanism.
In the early 1940s, memory technology often permitted a capacity of a few bytes. The first electronic programmable digital computer
, the ENIAC
, using thousands of octal-base radio vacuum tube
s, could perform simple calculations involving 20 numbers of ten decimal digits which were held in the vacuum tube.
The next significant advance in computer memory came with acoustic delay line memory
, developed by J. Presper Eckert
in the early 1940s. Through the construction of a glass tube filled with mercury
and plugged at each end with a quartz crystal, delay lines could store bits of information in the form of sound waves propagating through mercury, with the quartz crystals acting as transducer
s to read and write bits. Delay line memory
was limited to a capacity of up to a few hundred thousand bits to remain efficient.
Two alternatives to the delay line, the Williams tube
and Selectron tube
, originated in 1946, both using electron beams in glass tubes as means of storage. Using cathode ray tube
s, Fred Williams invented the Williams tube, which was the first random-access computer memory
. The Williams tube was more capacious than the Selectron tube (the Selectron was limited to 256 bits, while the Williams tube could store thousands) and less expensive. The Williams tube was nevertheless frustratingly sensitive to environmental disturbances.
Efforts began in the late 1940s to find non-volatile memory
. Magnetic-core memory
allowed for recall of memory after power loss. It was developed by Frederick W. Viehe and An Wang
in the late 1940s, and improved by Jay Forrester
and Jan A. Rajchman
in the early 1950s, before being commercialised with the Whirlwind
computer in 1953. Magnetic-core memory was the dominant form of memory until the development of MOS semiconductor memory
in the 1960s.
began in the early 1960s with bipolar memory, which used bipolar transistors
Bipolar semiconductor memory made from discrete device
s was first shipped by Texas Instruments
to the United States Air Force
in 1961. The same year, the concept of solid-state
memory on an integrated circuit
(IC) chip was proposed by applications engineer
Bob Norman at Fairchild Semiconductor
. The first bipolar semiconductor memory IC chip was the SP95 introduced by IBM
While bipolar memory offered improved performance over magnetic-core memory, it could not compete with the lower price of magnetic-core, which remained dominant up until the late 1960s.
Bipolar memory failed to replace magnetic-core memory because bipolar flip-flop
circuits were too large and expensive.
The invention of the MOSFET
(metal–oxide–semiconductor field-effect transistor, or MOS transistor), by Mohamed M. Atalla
and Dawon Kahng
at Bell Labs
enabled the practical use of metal–oxide–semiconductor
(MOS) transistors as memory cell
storage elements. MOS memory was developed by John Schmidt at Fairchild Semiconductor
In addition to higher performance, MOS semiconductor memory
was cheaper and consumed less power than magnetic core memory.
In 1965, J. Wood and R. Ball of the Royal Radar Establishment
proposed digital storage systems that use CMOS
(complementary MOS) memory cells, in addition to MOSFET power devices
for the power supply
, switched cross-coupling, switches
and delay line storage
. The development of silicon-gate MOS integrated circuit
(MOS IC) technology by Federico Faggin
at Fairchild in 1968 enabled the production of MOS memory chip
memory was commercialized by IBM
in the early 1970s. MOS memory overtook magnetic core memory as the dominant memory technology in the early 1970s.
The two main types of volatile random-access memory
(RAM) are static random-access memory
(SRAM) and dynamic random-access memory
(DRAM). Bipolar SRAM was invented by Robert Norman at Fairchild Semiconductor in 1963,
followed by the development of MOS SRAM by John Schmidt at Fairchild in 1964.
SRAM became an alternative to magnetic-core memory, but required six MOS transistors for each bit
Commercial use of SRAM began in 1965, when IBM introduced their SP95 SRAM chip for the System/360 Model 95
introduced bipolar DRAM memory cells
for its Toscal BC-1411 electronic calculator
[Toshiba "Toscal" BC-1411 Desktop Calculator](_blank)
While it offered improved performance over magnetic-core memory, bipolar DRAM could not compete with the lower price of the then dominant magnetic-core memory. MOS technology is the basis for modern DRAM. In 1966, Dr. Robert H. Dennard
at the IBM Thomas J. Watson Research Center
was working on MOS memory. While examining the characteristics of MOS technology, he found it was capable of building capacitors
, and that storing a charge or no charge on the MOS capacitor could represent the 1 and 0 of a bit, while the MOS transistor could control writing the charge to the capacitor. This led to his development of a single-transistor DRAM memory cell.
In 1967, Dennard filed a patent under IBM for a single-transistor DRAM memory cell, based on MOS technology. This led to the first commercial DRAM IC chip, the Intel 1103
, in October 1970.
[''The DRAM memory of Robert Dennard''](_blank)
Synchronous dynamic random-access memory
(SDRAM) later debuted with the Samsung
KM48SL2000 chip in 1992.
The term "memory" is also often used to refer to non-volatile memory
, specifically flash memory
. It has origins in read-only memory
(ROM). Programmable read-only memory
(PROM) was invented by Wen Tsing Chow
in 1956, while working for the Arma Division of the American Bosch Arma Corporation.
In 1967, Dawon Kahng and Simon Sze
of Bell Labs proposed that the floating gate
of a MOS semiconductor device
could be used for the cell of a reprogrammable read-only memory
(ROM), which led to Dov Frohman
(erasable PROM) in 1971.
(electrically erasable PROM) was developed by Yasuo Tarui, Yutaka Hayashi and Kiyoko Naga at the Electrotechnical Laboratory
in 1972. Flash memory was invented by Fujio Masuoka
in the early 1980s. Masuoka and colleagues presented the invention of NOR flash
in 1984, and then NAND flash
in 1987. Toshiba commercialized NAND flash memory in 1987.
Developments in technology and economies of scale have made possible so-called Very Large Memory (VLM) computers.
Volatile memory is computer memory that requires power to maintain the stored information. Most modern semiconductor
volatile memory is either static RAM (SRAM
) or dynamic RAM (DRAM
). SRAM retains its contents as long as the power is connected and is simpler for interfacing, but uses six transistors per bit. Dynamic RAM is more complicated for interfacing and control, needing regular refresh cycles to prevent losing its contents, but uses only one transistor and one capacitor per bit, allowing it to reach much higher densities and much cheaper per-bit costs.
SRAM is not worthwhile for desktop system memory, where DRAM dominates, but is used for their cache memories. SRAM is commonplace in small embedded systems, which might only need tens of kilobytes or less. Volatile memory technologies that have attempted to compete or replace SRAM and DRAM include Z-RAM
Non-volatile memory is computer memory that can retain the stored information even when not powered. Examples of non-volatile memory include read-only memory (see ROM
), flash memory
, most types of magnetic computer storage devices (e.g. hard disk drive
s, floppy disk
s and magnetic tape
), optical disc
s, and early computer storage methods such as paper tape
and punched card
Forthcoming non-volatile memory technologies include FERAM, CBRAM
, racetrack memory
, 3D XPoint
, and millipede memory
A third category of memory is "semi-volatile". The term is used to describe a memory which has some limited non-volatile duration after power is removed, but then data is ultimately lost. A typical goal when using a semi-volatile memory is to provide high performance/durability/etc. associated with volatile memories, while providing some benefits of a true non-volatile memory.
For example, some non-volatile memory types can wear out, where a "worn" cell has increased volatility but otherwise continues to work. Data locations which are written frequently can thus be directed to use worn circuits. As long as the location is updated within some known retention time, the data stays valid. If the retention time "expires" without an update, then the value is copied to a less-worn circuit with longer retention. Writing first to the worn area allows a high write rate while avoiding wear on the not-worn circuits.
As a second example, an STT-RAM
can be made non-volatile by building large cells, but the cost per bit and write power go up, while the write speed goes down. Using small cells improves cost, power, and speed, but leads to semi-volatile behavior. In some applications the increased volatility can be managed to provide many benefits of a non-volatile memory, for example by removing power but forcing a wake-up before data is lost; or by caching read-only data and discarding the cached data if the power-off time exceeds the non-volatile threshold.
The term semi-volatile is also used to describe semi-volatile behavior constructed from other memory types. For example, a volatile and a non-volatile memory may be combined, where an external signal copies data from the volatile memory to the non-volatile memory, but if power is removed without copying, the data is lost. Or, a battery-backed volatile memory, and if external power is lost there is some known period where the battery can continue to power the volatile memory, but if power is off for an extended time, the battery runs down and data is lost.
Proper management of memory is vital for a computer system to operate properly. Modern operating system
s have complex systems to properly manage memory. Failure to do so can lead to bugs, slow performance, and at worst case, takeover by viruses
and malicious software
Improper management of memory is a common cause of bugs, including the following types:
* In an arithmetic overflow
, a calculation results in a number larger than the allocated memory permits. For example, a signed 8-bit integer allows the numbers −128 to +127. If its value is 127 and it is instructed to add one, the computer can not store the number 128 in that space. Such a case will result in undesired operation, such as changing the number's value to −128 instead of +128.
* A memory leak
occurs when a program requests memory from the operating system and never returns the memory when it's done with it. A program with this bug will gradually require more and more memory until the program fails as it runs out.
* A segmentation fault
results when a program tries to access memory that it does not have permission to access. Generally a program doing so will be terminated by the operating system.
* A buffer overflow
means that a program writes data to the end of its allocated space and then continues to write data to memory that has been allocated for other purposes. This may result in erratic program behavior, including memory access errors, incorrect results, a crash, or a breach of system security. They are thus the basis of many software vulnerabilities and can be maliciously exploited.
Early computer systems
In early computer systems, programs typically specified the location to write memory and what data to put there. This location was a physical location on the actual memory hardware. The slow processing of such computers did not allow for the complex memory management systems used today. Also, as most such systems were single-task, sophisticated systems were not required as much.
This approach has its pitfalls. If the location specified is incorrect, this will cause the computer to write the data to some other part of the program. The results of an error like this are unpredictable. In some cases, the incorrect data might overwrite memory used by the operating system. Computer crackers can take advantage of this to create viruses and malware
Virtual memory is a system where all physical memory
is controlled by the operating system. When a program needs memory, it requests it from the operating system. The operating system then decides in what physical location to place the program's code and data.
This offers several advantages. Computer programmers no longer need to worry about where their data is physically stored or whether the user's computer will have enough memory. It also allows multiple types of memory to be used. For example, some data can be stored in physical RAM chips while other data is stored on a hard drive
(e.g. in a swapfile
), functioning as an extension of the cache hierarchy
. This drastically increases the amount of memory available to programs. The operating system will place actively used data in physical RAM, which is much faster than hard disks. When the amount of RAM is not sufficient to run all the current programs, it can result in a situation where the computer spends more time moving data from RAM to disk and back than it does accomplishing tasks; this is known as thrashing
Protected memory is a system where each program is given an area of memory to use and is not permitted to go outside that range. Use of protected memory greatly enhances both the reliability and security of a computer system.
Without protected memory, it is possible that a bug in one program will alter the memory used by another program. This will cause that other program to run off of corrupted memory with unpredictable results. If the operating system's memory is corrupted, the entire computer system may crash and need to be rebooted
. At times programs intentionally alter the memory used by other programs. This is done by viruses and malware to take over computers. It may also be used benignly by desirable programs which are intended to modify other programs; in the modern age, this is generally considered bad programming practice for application programs, but it may be used by system development tools such as debuggers, for example to insert breakpoints or hooks.
Protected memory assigns programs their own areas of memory. If the operating system detects that a program has tried to alter memory that does not belong to it, the program is terminated (or otherwise restricted or redirected). This way, only the offending program crashes, and other programs are not affected by the misbehavior (whether accidental or intentional).
Protected memory systems almost always include virtual memory as well.
* Memory geometry
* Memory hierarchy
* Memory organization
* Semiconductor memory
* Units of information