Один из методов, которые я использовал, состоит в том, чтобы включить мои собственные простые процедуры кучи и взять из библиотеки функции malloc()
/ calloc()
/ free()
.
Простые пользовательские подпрограммы кучи имели интерфейс, позволяющий добавлять блоки памяти в кучу.
Недостатком этого (по крайней мере, в моем случае) было то, что пользовательские подпрограммы кучи были далекоменее сложны, чем встроенные подпрограммы библиотеки, и, вероятно, более подвержены фрагментации, чем встроенные подпрограммы.Это не было серьезной проблемой в этом конкретном приложении.Если вам нужны возможности встроенных библиотечных подпрограмм, возможно, вы можете отложить malloc()
на встроенные подпрограммы кучи до тех пор, пока она не вернет ошибку, а затем попытаться выделить ее из своей пользовательской кучи.
Другим недостатком является то, что мне было гораздо сложнее убедиться, что пользовательские подпрограммы не содержат ошибок, чем я думал, что это будет на первый взгляд, хотя я и не пытался делать что-то слишком причудливое (просто простой список свободных блоков).которые могут быть разделены при выделении и объединены при освобождении).
Одно из преимуществ этого метода заключается в том, что он довольно переносим (если ваши пользовательские подпрограммы переносимы) и не ломается, если цепочка инструментов меняет свои внутренние компоненты.,Единственная часть, которая требует портирования, - это использование интерфейса malloc()
/ free()
и уверенность, что вы инициализированы достаточно рано.