@Sasha_88

Когда вызывается malloc() или new, то на самом деле вызывается какая-то win api функция?

И при удалении тоже? И вот интересно, а как сделать маленькую кучу, чтобы память выделялась в пределах этой маленькой кучи только?
  • Вопрос задан
  • 494 просмотра
Решения вопроса 2
Nipheris
@Nipheris Куратор тега C++
Когда вызывается malloc() или new, то на самом деле вызывается какая-то win api функция?

Нет, не всегда. В большинстве случаев не вызывается. Системный вызов осуществляется только если текущий блок, управляемый сишной кучей (т.е. сишным рантаймом) исчерпывается. Если б каждый раз делался системный вызов, вы б не дождались результатов работы вашей программы.

И при удалении тоже?

См. выше.

И вот интересно, а как сделать маленькую кучу, чтобы память выделялась в пределах этой маленькой кучи только?

Выделяете блок памяти любым из известных вам способов, декларируете функции а-ля myalloc и myfree, и реализуете один из алгоритмов управления свободным пространством в куче (например, двоичного разбиения).

В C++ можно переопределить операторы new и delete.
Ответ написан
@abcd0x00
Первый раз вызывается какая-то функция операционной системы (в зависимости от системы, есть же не только Windows) и запрашивается очень большой блок (даже если запрашиваешь мало). Потом из него выделяется то, что ты запросил, и в нём же запоминается информация об этом (метаданные). При последующих вызовах этот первый блок продолжает нарезаться, пока в нём хватает памяти (может на всё время хватить). Во время освобождения памяти этот блок остаётся занятым, просто в нём какие-то места помечаются свободными для повторного использования.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
CTRL+ Москва
от 250 000 до 320 000 ₽
CTRL+ Москва
от 200 000 до 300 000 ₽
CTRL+ Белград
от 250 000 до 320 000 ₽
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час