Вам специально нужен malloc для выделения памяти новым элементам связанного списка - PullRequest
0 голосов
/ 01 ноября 2019

Итак, насколько мне известно, malloc возвращает указатель на местоположение в куче.

sbrk () расширяет кучу минимум на 4k

Если я не смог использоватьmalloc, по причинам, было бы возможно в c выделить память для нового члена, если связанный список (например), используя адрес с теми 4k, которые были получены вызовом sbrk (), вместо malloc?

Извините, если это вопрос dmub: (

РЕДАКТИРОВАТЬ: причина, по которой я не могу использовать malloc, заключается в том, что моя задача состоит в том, чтобы создать свой собственный malloc, и мне сказали использовать sbrk.

Ответы [ 2 ]

2 голосов
/ 01 ноября 2019

brk и sbrk были удалены из POSIX;они не портативны. Некоторые реализации malloc используют sbrk, но не обязательно ожидают, что код приложения будет перемещать адрес разрыва, и поэтому использование sbrk может сломать malloc. Даже если ваш код не использует malloc, возможно, вам не удастся избежать прерывания malloc, потому что какой-то другой код в вашем процессе может вызывать его.

Для более непосредственного получения памяти страницот ядра операционной системы относительно malloc в современной среде POSIX, лучший выбор - функция mmap (с флагами MAP_ANON и MAP_PRIVATE).

0 голосов
/ 02 ноября 2019

brk и sbrk являются альтернативным (устаревшим) способом выделения памяти кучи вместо использования malloc. В общем, вы никогда не должны использовать их в программе, которая использует malloc, но если ваша программа никогда не использует malloc (и никогда не использует какие-либо функции stdlib, которые используют malloc, такие как stdio), вы можете использовать их вместо этого для управления кучей.

sbrk может использоваться как malloc для выделения некоторого дополнительного пространства кучи (количество, указанное его аргументом). brk может использоваться как free, за исключением того, что освобождает указанный блок И ВСЕ, РАСПРЕДЕЛЕННОЕ ПОСЛЕ ЭТОГО последующими вызовами sbrk.

...