Regarding brk and sbrk

V

venkat

Hi folks,

Can some help in understanding brk and sbrk. how does these are
implemeted(means how the memeory will be allocated). How malloc will
call these brk and sbrk. Please also give any example C program, where
brk and sbrk are used to allocate memory.

Appreciate your help in this regard,


Thanks,
Vikas.
 
V

vipvipvipvip.ru

Can some help in understanding brk and sbrk. how does these are
implemeted(means how the memeory will be allocated). How malloc will
call these brk and sbrk. Please also give any example C program, where
brk and sbrk are used to allocate memory.

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).
 
C

cr88192

venkat said:
Hi folks,

Can some help in understanding brk and sbrk. how does these are
implemeted(means how the memeory will be allocated). How malloc will
call these brk and sbrk. Please also give any example C program, where
brk and sbrk are used to allocate memory.

as noted, these are not standard.
following this, they are not even a good idea...

now, for general info:
malloc implementations tend to grab chunks of memory from the OS, and brk
and sbrk were one such method (they worked by sliding a pointer, and
generally mapping in pages as needed and so on).

another, generally better, method, is the use of mmap (on linux and
friends).

on windows, a general way to grab raw memory is through VirtualAlloc.

however, all this is a generally non-portable issue, and so, the exact
answers will depend highly on the target OS...

or such...
 
C

CBFalconer

venkat said:
Can some help in understanding brk and sbrk. how does these are
implemeted(means how the memeory will be allocated). How malloc
will call these brk and sbrk. Please also give any example C
program, where brk and sbrk are used to allocate memory.

This is off-topic. These calls normally appear in some Unix-like
OS, and are used to expand (or possibly contract) the memory
available to a process.

You can see one example in nmalloc, a malloc/free/realloc system
for DJGPP using sbrk, available at:

<http://cbfalconer.home.att.net/download/>

Since such calls are system dependent, try a news group that deals
with your system if more data is needed.
 
U

user923005

Hi folks,

Can some help in understanding brk and sbrk. how does these are
implemeted(means how the memeory will be allocated). How malloc will
call these brk and sbrk. Please also give any example C program, where
brk and sbrk are used to allocate memory.

Try over on where they will promptly tell
you not to use those functions.
 
P

pete

venkat said:
Hi folks,

Can some help in understanding brk and sbrk. how does these are
implemeted(means how the memeory will be allocated). How malloc will
call these brk and sbrk. Please also give any example C program, where
brk and sbrk are used to allocate memory.

In chapter 8 of The C Programming Language, there is
an example of a general purpose storage allocator function.

The general purpose storage allocator function,
calls a function named morecore.

The definition of morecore, shows a call to sbrk.
 
K

karthikbalaguru

Hi folks,

Can some help in understanding brk and sbrk. how does these are
implemeted(means how the memeory will be allocated). How malloc will
call these brk and sbrk. Please also give any example C program, where
brk and sbrk are used to allocate memory.

Appreciate your help in this regard,

Thanks,
Vikas.


brk, sbrk - you need unistd.h
They change the amount of space allocated for the
calling process's data segment. They change data segment
size .

int brk(void *end_data_segment);
void *sbrk(ptrdiff_t increment);

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 system 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.

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.

The amount of allocated space increases as the break value
increases. Newly allocated
space is set to zero. If, how-ever, the same memory space is
reallocated to the same pro-
cess its contents are undefined.

When a program begins execution using execve() the break is set at
the highest location
defined by the program and data storage areas.

getrlimit and setrlimit get and set resource limits respectively. Each
resource has an associated soft and hard limit, as defined by the
rlimit structure (the rlim argument to both getrlimit() and
setrlimit()):

struct rlimit {
rlim_t rlim_cur; /* Soft limit */
rlim_t rlim_max; /* Hard limit (ceiling
for rlim_cur) */
};


The soft limit is the value that the kernel enforces for the
corresponding resource. The hard limit acts as a ceiling for the soft
limit: an unprivileged process may only set its soft limit to a value
in the range from 0 up to the hard limit, and (irreversibly) lower its
hard limit. A privileged process may make arbitrary changes to either
limit value.

Have a look at these links ->
1) http://linux.about.com/library/cmd/blcmdl2_brk.htm
2) http://www.minix3.org/manpages/man2/brk.2.html

Karthik Balaguru
 
B

Barry Schwarz

Hi folks,

Can some help in understanding brk and sbrk. how does these are
implemeted(means how the memeory will be allocated). How malloc will
call these brk and sbrk. Please also give any example C program, where
brk and sbrk are used to allocate memory.

Appreciate your help in this regard,

Since neither is a standard C function, you might have better luck
asking in a newsgroup related to whatever system they are defined on.


Remove del for email
 
T

Tor Rustad

venkat said:
Hi folks,

Can some help in understanding brk and sbrk.

man man
how does these are
implemeted(means how the memeory will be allocated).

There are a number of open sources UNIX'es, why not take a look?
How malloc will
call these brk and sbrk. Please also give any example C program, where
brk and sbrk are used to allocate memory.

GNU provide an open source C library, why not take a look?

http://g.oswego.edu/dl/html/malloc.html
 
K

karthikbalaguru

Hi folks,

Can some help in understanding brk and sbrk. how does these are
implemeted(means how the memeory will be allocated). How malloc will
call these brk and sbrk. Please also give any example C program, where
brk and sbrk are used to allocate memory.

Appreciate your help in this regard,

The data region corresponds to the data-bss sections(initialized and
uninitialized data, Static
variables) of the executable file.

Its size can be changed with the brk(2) system call.

If the expansion of the bss data or the user stack exhausts available
memory,
the process is blocked and is rescheduled to run again with a larger
memory
space. New memory is added between the data and stack segments.

Karthik Balaguru
 
W

Walter Roberson

The data region corresponds to the data-bss sections(initialized and
uninitialized data, Static
variables) of the executable file.
Its size can be changed with the brk(2) system call.
If the expansion of the bss data or the user stack exhausts available
memory,
the process is blocked and is rescheduled to run again with a larger
memory
space. New memory is added between the data and stack segments.

I don't know what system you are describing, but
A) It isn't defined by C; and
B) Matters are handled in *completely* different ways on some systems; and
C) The part about blocking isn't even the way things get handled
on the Unix systems I've used.
 
C

CBFalconer

karthikbalaguru said:
The data region corresponds to the data-bss sections (initialized
and uninitialized data, Static variables) of the executable file.

Its size can be changed with the brk(2) system call.

If the expansion of the bss data or the user stack exhausts
available memory, the process is blocked and is rescheduled to
run again with a larger memory space. New memory is added
between the data and stack segments.

This only applies to some specific operating systems, and is
off-topic for c.l.c. Please don't give off-topic info here - it is
better to refer the asker to some other newsgroup where answers
will be properly vetted.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,767
Messages
2,569,570
Members
45,045
Latest member
DRCM

Latest Threads

Top