NAME
brk, sbrk - change data segment size
SYNOPSIS
#include <unistd.h>
int brk(void *end_data_segment);
void *sbrk(intptr_t increment);
DESCRIPTION
brk() sets the end of the data segment to the value specified by end_data_segment,
when that value is reasonable, the system does have enough memory and the process
does not exceed its max data size (see setrlimit(2)).
sbrk() increments the program's data space by increment bytes. sbrk() isn't a sys-
tem call, it is just a C library wrapper. Calling sbrk() with an increment of 0
can be used to find the current location of the program break.
RETURN VALUE
On success, brk() returns zero, and sbrk() returns a pointer to the start of the
new area. On error, -1 is returned, and errno is set to ENOMEM.
CONFORMING TO
4.3BSD
brk() and sbrk() are not defined in the C Standard and are deliberately excluded
from the POSIX.1 standard (see paragraphs B.1.1.1.3 and B.8.3.3).
NOTES
Various systems use various types for the parameter of sbrk(). Common are int,
ssize_t, ptrdiff_t, intptr_t. XPGv6 obsoletes this function.
SEE ALSO
execve(2), getrlimit(2), malloc(3)
The brk() and sbrk() functions are used to change the amount of memory
allocated in a process's data segment. They do this by moving the loca-
tion of the ``break''. The break is the first address after the end of
the process's uninitialized data segment (also known as the ``BSS'').
brk and sbrk設(shè)置的是BSS里的邊界,具體什么是BSS呢
bss = "Block Started by Symbol" (由符號啟始的區(qū)塊)
Dennis Ritchie 曾說過:
這個(gè)縮寫也許有其它說法,但事實(shí)上我們采用這個(gè)縮寫的本意是
"Block Started by Symbol"。它是 FAP 上的偽指令,F(xiàn)AP
(Fortran Assembly [-er?] Program) 是指 IBM 704-709-7090-7094
這種機(jī)型的組譯器。這個(gè)指令可定義自己的標(biāo)號,并且預(yù)留一定數(shù)目
的字組空間。還有另一個(gè)偽指令 BES,是 "Block Ended by
Symbol",跟 BSS 指令幾乎一樣,不同點(diǎn)在于標(biāo)號是定義在預(yù)留字組
空間尾端的地址 + 1 的地方。在這些機(jī)器上,F(xiàn)ortran 的數(shù)組是以反
方向儲存,而且數(shù)組的索引是從 1 算起。
這種用法是合理的,因?yàn)檫@跟 UNIX 上標(biāo)準(zhǔn)的程序加載器一樣,程序
碼當(dāng)中并非真的放入這一整塊預(yù)留空間,而是先用一個(gè)數(shù)目表示,在
加載時(shí)才真的把所需的預(yù)留空間定出來。
from:
Linux man page and
http://www.linuxforum.net/forum/gshowflat.php?Cat=&Board=linuxK&Number=300677&page=16&view=collapsed&sb=5&o=all&fpart=
posted on 2010-02-18 19:23
chatler 閱讀(662)
評論(0) 編輯 收藏 引用 所屬分類:
Linux_Coding