Цитата(asket @ Oct 19 2010, 14:49)

...невыгодно с точки зрения экономии памяти...
Я то думал вы оперируете сотнями мегабайт - гигабайтами

, там-то пару байт не жалко.
Цитата
А вот идентификационный номер (ID) тоже неоднозначно, допустим, однобайтовый текущий номер 0xFF, а следующий будет 0, какой последний пакет, а какой первый?
Прежде всего я бы ID 0xff запретил, т.е. максимальный номер допустим 0xfe. Если Вы в дальнейшем на Flash перейдете 0xff будет в пустых ячейках.
Теперь о главном. Я не зря сказал, что максимальный номер ID должен хотя бы на 1 быть больше возможных сообщений. Дальше буду использовать слово ячейки, и оперировть ячейками одинаковой длины. Тоже самое справедливо и для переменной длины. Только прежде чем записывать следующую запись поверх предыдущих, нужно, скорее всего, (сами это додумаете) удалять предыдущие ячейки по границам сообщений. Допустим память имеет 254 ячейки (0x00-0xfd). Тогда можем использовать 1байт с максимальным номером 255 (0xfe). В этом случае при первом заполнении доходим до 0xfd и в нулевую ячейку ляжет запись с ID 0xfe вместо предыдущей 0x00. На место записи с ID 0x01 ложится запись с ID 0x00. Допустим начинаем поиск. Смотрим в нулевую ячейку. ID 0xfe. Рассчитываем следующий ID - 0x00. Находим следующую запись. В ней ID 0x00. Находим следующую. В ней ID 0x02, а должен быть на 1 больше предыдущего - 0x01. Следовательно эта запись с ID 02 - начало рулона, а запись с 00 - конец, т.е. последняя.
Цитата
Должны ведь готовые решения, неужели их нет?
Наверняка. Какие-нибудь файловые системы. Правда, думаю, т.к. памятью Вы не богаты сложно будет их использовать.