Content deleted Content added
Removed unnecessary 'a' from "...to access a 1 MB of memory space." in top section, end of 3rd paragraph. |
Make clear link is for Ruby |
||
(28 intermediate revisions by 25 users not shown) | |||
Line 1:
{{Short description|Storage segment}}
In [[computing]], a '''data segment''' (often denoted '''.data''') is a portion of an [[object file]] or the corresponding [[
The data segment is read
Historically, to be able to support memory address spaces larger than the native size of the internal address register would allow, early CPUs implemented a system of segmentation whereby they would store a small set of indexes to use as offsets to certain areas. The [[Intel 8086]] family of CPUs provided four segments: the code segment, the data segment, the stack segment and the extra segment. Each segment was placed at a specific ___location in memory by the software being executed and all instructions that operated on the data within those segments were performed relative to the start of that segment. This allowed a 16-bit address register, which would normally be able to access 64 KB of memory space, to access 1 MB of memory space.
Line 7 ⟶ 8:
This segmenting of the memory space into discrete blocks with specific tasks carried over into the programming languages of the day and the concept is still widely in use within modern programming languages.
== Program memory ==
A computer program memory can be largely categorized into two sections: read-only and read
{{main|Code segment}}
The '''code segment''', also known as
▲The '''code segment''', also known as a '''text segment''' or simply as '''text''', is where a portion of an [[object file]] or the corresponding section of the program's [[virtual address space]] that contains [[executable]] instructions is stored and is generally read-only and fixed size.
▲===Data===
[[File:Program memory layout.pdf|thumb|383x383px|This shows the typical layout of a simple computer's program memory with the text, various data, and stack and heap sections.]]
The ''
int val = 3;▼
char string[] = "Hello World";▼
▲===BSS===
The [[BSS segment]], also known as ''uninitialized data'', is usually adjacent to the data segment. The BSS segment contains all global variables and static variables that are initialized to zero or do not have explicit initialization in source code. For instance, a variable defined as <code>static int i;</code> would be contained in the BSS segment.▼
<syntaxhighlight lang="c">
===Heap===▼
The heap area commonly begins at the end of the .bss and .data segments and grows to larger addresses from there. The heap area is managed by [[malloc]], calloc, realloc, and free, which may use the [[Sbrk|brk]] and [[sbrk]] system calls to adjust its size (note that the use of brk/sbrk and a single "heap area" is not required to fulfill the contract of malloc/calloc/realloc/free; they may also be implemented using [[mmap]]/munmap to reserve/unreserve potentially non-contiguous regions of virtual memory into the process' [[virtual address space]]). The heap area is shared by all threads, shared libraries, and dynamically loaded modules in a process.▼
static int b = 2023; // Initialized static global variable
void foo (void) {
static int c = 2023; // Initialized static local variable
}
</syntaxhighlight>
===
{{
▲The
<syntaxhighlight lang="c">
static int i;
static char a[12];
</syntaxhighlight>
▲=== Heap ===
{{main|Manual memory management}}
▲The '''heap
=== Stack ===
The stack area contains the program [[Stack (data structure)|stack]], a [[LIFO (computing)|LIFO]] structure, typically located in the higher parts of memory. A "stack pointer" register tracks the top of the stack; it is adjusted each time a value is "pushed" onto the stack. The set of values pushed for one function call is termed a "stack frame". A stack frame consists at minimum of a return address. [[Automatic variable]]s are also allocated on the stack.▼
{{main|Call stack}}
▲The '''stack
The stack
==Interpreted languages==
Some interpreted languages offer a similar facility to the data segment, notably [[Perl]]<ref>[http://perldoc.perl.org/perldata.html#Special-Literals perldata: Special Literals]</ref> and [[Ruby (programming language)|Ruby]].<ref>Ruby:
==See also==
Line 47 ⟶ 56:
* [[Uninitialized variable]]
* [[Stack (abstract data type)]]
* [[Process control block]]
== References ==
{{reflist}}
* {{cite web|title=BraveGNU.org|url=http://www.bravegnu.org/gnu-eprog/c-startup.html}}▼
== External links ==
* {{cite web
*[http://blog.ooz.ie/2008/09/0x03-notes-on-assembly-memory-from.html mem_sequence.c - sequentially lists memory regions in a process]▼
|title=C startup
|website = bravegnu.org}}
* {{cite web
▲
|archive-url = https://web.archive.org/web/20090202113414/http://blog.ooz.ie/2008/09/0x03-notes-on-assembly-memory-from.html
|url-status = dead
|archive-date = 2009-02-02
|title = mem_sequence.c - sequentially lists memory regions in a process}}
* {{cite book
|url = http://www.electroons.com/8051/ebooks/expert%20C%20programming.pdf
|title = Expert C Programming: Deep C Secrets
|first = Peter
|last = van der Linden
|publisher = Prentice Hall
|year = 1997
|pages = 119ff}}
{{DEFAULTSORT:Data Segment}}
|