malloc () - это функция, которая обычно реализуется библиотекой времени выполнения.Вы правы, если вы работаете поверх операционной системы, то malloc иногда (но не каждый раз) запускает системный вызов, который заставляет ОС отображать некоторую память в адресное пространство вашей программы.
Если ваша программа работает без операционной системы, то вы можете думать, что ваша программа является операционной системой.У вас есть доступ ко всем адресам, то есть вы можете просто назначить адрес указателю, а затем разыменовать этот указатель для чтения / записи.
Конечно, вы должны убедиться, что не другие части вашей программы простоиспользуйте ту же память, поэтому вы пишете свой собственный менеджер памяти:
Проще говоря, вы можете выделить диапазон адресов, которые ваш "менеджер памяти" использует длядиапазоны адресов уже используются (хранящиеся в них структуры данных могут быть простыми, как связанный список, или намного более сложными).Затем вы напишите функцию и вызовете ее, например, malloc () , которая образует функциональную часть вашего менеджера памяти.Он изучает упомянутую структуру данных, чтобы найти адрес диапазонов, длина которого указана в аргументе, и вернуть указатель на него.
Теперь, если каждая функция в вашей программе вызывает функцию malloc () вместо случайной записив пользовательские адреса вы сделали первый шаг.Вы можете написать free () -функцию, которая будет искать указатель, указанный в упомянутой структуре данных, и адаптирует структуру данных (в наивном связном списке он объединит две ссылки).