Как управлять выравниванием памяти и общей арифметикой указателей переносимым способом в C?

Мне нужно реализовать оптимизированную версию malloc / realloc / free (адаптированную для моего конкретного приложения). На данный момент код работает на определенной платформе, но я хотел бы написать его переносимым способом, если это возможно (платформа может измениться в будущем), или, по крайней мере, я хотел бы сосредоточить возможные различия платформ в одном точка (вероятно, a .h). Мне известны некоторые проблемы:

  • различия в выравнивании памяти
  • различия в размере наименьших блоков памяти, подходящие для "общего" распределения
  • различия в размере указателя

(я проигнорирую различия в здесь базовые системные сервисы для распределения памяти, так как в некоторых встроенных системах они могут быть вообще недоступны. Представьте, что мы работаем с большим заранее выделенным блоком памяти, который будет использоваться как «куча»).

Вопрос (ы):

  • Существуют ли стандартные макросы или функции в C для такого рода целей?
  • С какими еще проблемами я могу столкнуться в этой работе?
5
задан Lightness Races with Monica 31 January 2012 в 17:18
поделиться