‮Сдвиг по фазе (kincajou) wrote,
‮Сдвиг по фазе
kincajou

Categories:

uCLisp: как избавиться от malloc (почти совсем), но всё равно динамически выделять память

А очень просто: чтобы выделить память, ничего не выделяя, надо выделить память заранее!
Вот просто взять и выделить сразу большой кусок, разметить его как список ячеек и назвать сие как-то типа free_nodes_list_ptr.
Когда нужна новая ячейка, отщипывать её от начала списка (передвигая указатель free_nodes_list_ptr на free_nodes_list_ptr->cdr).
Когда ячейку cell высвобождаем, то cell->cdr = free_nodes_list_ptr; free_nodes_list_ptr = cell.
И вуаля, в 99% случаев, когда надо выделить/свободить ячейку, на самом деле не надо будет ничего выделять/освобождать вовсе.
Два нюанса:
1) т.к. я надеюсь утрамбовать всё в очень небольшой футпринт, хранение строк а-ля большой Лисп (когда строка представляется как список литералов) не подходит в виду неприемлемого расхода памяти - т.е. без классической динамической кучи всё равно не обойтись
2) заранее очень сложно понять, сколько же ячеек надо выделить.

Но всё равно такой способ экономичен и скуп, т.к. оверхед получается вообще околонулевой.

Идея мне нравится, надо поиграть с кодом.

Печальная калькуляция: во многих моих проектах (ирония - из личных проектов на ARM у меня пока только один) я использую старый добрый STM32F103, вот как тут:

В старших версиях этого почтенного чипа аж 64 килобайта оперативки. Допустим, под виртуальную машину выделим 32к памяти, то есть прямо половину (нужно ещё учесть, что под fatfs и стэк usb выделяются несколько килобайт, плюс х.з. что там ещё понадобится). Эти 32к превращаются в 4к ячеек (т.к. каждая ячейка занимает, как ни крути, 8 байт - даже если надо хранить всего лишь булево true или false). 4096 "атомов" в программе на Лиспе - много это или мало? Я не знаю.
Tags: uncommon lisp
Subscribe

  • Пропаганда пропаганды

  • Earth-Moon-Earth

    Вот есть такой метод радиосвязи, с отражением от Луны: очень крутая штука - достаточно высокочастотные волны проходят сквозь ионосферу практически…

  • А это только у меня так?

    Под этим видео не то что "комментарии отключены" -- там вообще ничего нет, даже стандартной плашки с названием канала!

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 8 comments