Изменить размер адресного пространства процесса
#include <unistd.h>void * sbrk( int increment );
libc
Значение прерывания - это адрес первого байта нераспределенной памяти. Когда программа начинает выполнение, значение прерывания помещается после кода и константных данных для программы. По мере выделения памяти этот указатель продвигается вперед, когда нет достаточно большого свободного блока, чтобы запрос на выделение был выполнен. Функция sbrk() устанавливает новое значение прерывания для программы, добавляя значение приращения increment к текущему значению прерывания. Недавно выделенная область будет обнулена.
Переменная _amblksiz (определенная в <stdlib.h>
) содержит приращение по умолчанию. Это значение может быть изменено программой в любое время.
Указатель на начало нового блока памяти. Если возникла ошибка функция возвращает -1
, код ошибки записывается в errno.
#include <unistd.h>#include <stdio.h>#include <stdlib.h>#define alloc( x, y ) y = sbrk( x );int main( void ){void *brk;brk = sbrk( 0x3100 );printf( "New break value after sbrk( 0x3100 ) \t%p\n", brk );brk = sbrk( 0x0200 );printf( "New break value after sbrk( 0x0200 ) \t%p\n", brk );return (EXIT_SUCCESS);}
Legacy Unix
Не рекомендуется использовать brk() и sbrk() с любыми другими функциями памяти (такими как malloc(), mmap() и free()). Функция brk() предполагает, что куча является непрерывной; в ЗОСРВ «Нейтрино» память возвращается системе из кучи, в результате чего куча становится разреженной. Функция malloc() основана на mmap(), а не на brk().
Функция sbrk() использовалась в особых случаях, когда никакая другая функция распределения памяти не предоставляла такую возможность. Вместо функции sbrk() необходимо использовать mmap(), потому что её можно переносимо использовать со всеми другими функциями распределения памяти и с любой функцией, которая использует другие функции распределения.
Значение аргумента sbrk() округляется в большую сторону для выравнивания с 8-байтовыми границами.
_amblksiz, brk(), _btext, calloc(), _edata, _end, errno, _etext, free(), malloc(), mmap(), realloc()
Предыдущий раздел: Описание API системной библиотеки