Пользовательский распределитель для игрушечного языка

У меня есть игрушечный язык для компиляции в C++, который работает на MCU с 2 КБ оперативной памяти (у меня нет доступа к стандартной библиотеке C++ или boost и т. д.), чтобы сохранить единообразие, все мои объекты распределены в куче. Проблема в avr-gcc,

http://www.nongnu.org/avr-libc/user-manual/malloc.html

использует двухбайтовый заголовок для каждого объекта malloc, AFAIK, что означает, что возвращаемый объект функции, который не имеет состояния, потребляет 3 байта (1 байт для соответствия стандарту + 2 байта информации о malloc), для ints он потребляет 4 байта (2 байта информации + 2 byte для самого int) в значительной степени удваивает размеры всех моих объектов, поэтому простое включение / выключение светодиодного приложения потребляет 1 КБ оперативной памяти.

У меня уже есть собственная объектная система, которая переопределяет new/delete (в avr-gcc она не реализована). Поэтому я думаю, что, возможно, пользовательский распределитель будет потреблять меньше памяти и немного ускорять работу, поскольку он будет обслуживать запрос из фрагмента, который уже выделено. Существуют ли какие-либо реализации, которые будут работать в моем случае?


person Hamza Yerlikaya    schedule 30.05.2011    source источник
comment
У вас уже есть выделенный фрагмент. Аппаратно.   -  person Hans Passant    schedule 30.05.2011


Ответы (1)


Просто не выделяйте/не возвращайте много мелких объектов. Я бы создал массив для своих объектов и передал индексы в качестве аргументов и возвращаемого значения.

person John    schedule 30.05.2011
comment
+1: Это, в основном. Вы не можете избежать того факта, что malloc/new нужна метаинформация для каждого распределения. Просто выделите все 2 КБ заранее, а затем сами управляйте выделением для игрушечного языка. - person Oliver Charlesworth; 30.05.2011