Fatal
написал 15 октября 2004 года в 23:51 (741 просмотр)
Ведет себя
как мужчина; открыл 123 темы в форуме, оставил 484 комментария на сайте.
Подскажите, пожалуйста, через какой системмный вызов во FreeBSD запрашивается память в куче, и соответственно освобождение. И если можно и в Linux. Я чё-то копался все не нашел, да и время стало очень мало.
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
Памятья в куче управляют malloc/free — в чистом виде библиотечные функции. Для увеличения кучи, malloc при случае вызывает системный вызов sbrk. Обратной операции (сокращения кучи) не предусмотрено.
Вы меня не правильно поняли, мне нужны именно системные вызовы, через которые и построены библиотечные malloc, calloc, realloc.
www.gnu.org, дока по glibc — там все написано.
Нельзя ли поточнее ссылке, я копался, но что-то не нашел
Umm, боюсь, что я-то как раз понял правильно. Искомые вызовы не существуют. Беда такая. Их нет.
Для порядка напишите программу
и прoгоните ее через strace. Очень помогает.
Системные вызовы обязаны существовать, вы меня натолкнули на мысль просмотреть ассамблерный код, который соорудит gcc
В асм коде он вызывает туж библиотечную функцию.
А что такое strace, в man я не нашёл
strace это такая программа. strace program отслеживает и печатает системные вызовы, которы делает program.
malloc мспользует mmap для запросов на выделение большого кол-ва памяти. В остальных случаях (как я понимаю) используется brk.
Во FreeBSD и многих других юниксах вместо strace используется truss или ее более продвинутые аналоги (например, в солярисе). Список всех системных вызовов FreeBSD находится тут:
/usr/src/sys/kern/syscalls.c
понято, спасибо!