Чтобы избежать сохранения сложных структур данных, я хочу выделить блоки с довольно большим выравниванием (скажем, несколько килобайт, возможно, мегабайт, всегда степенью двойки).Это позволяет мне замаскировать младшие биты указателя, чтобы легко получить адрес начала блока, на который он указывает.
Я бы хотел метод, гарантирующий выделение такого блока с указанным выравниванием,например.выделить 4096 байтовых блоков с выравниванием 4096 байтов.Чтобы метод работал, выравнивание всегда будет размером блоков, поэтому в долгосрочной перспективе ожидается потеря памяти.
Я использую C ++ (поэтому методы C и C ++ хороши), и любое решение должно быть переносимым на обычные рабочие столы.Если портативного решения не существует, Linux имеет наивысший приоритет.
Мне известно о распределении памяти Win32 с большим выравниванием , но если есть общая библиотека C, которая делает это с одной функциейя бы с радостью воспользовался им.
Справочная информация: Я экспериментирую со структурами Vlist, описанными там (конечная цель - это своего рода интерпретатор Scheme),и в настоящее время я внедряю сборку мусора для этих списков.Мне нужны довольно большие блоки памяти в качестве арен для сборщика мусора.Если я изменю технику GC, мне все еще нужно, чтобы блоки VList имели 32-байтовое выравнивание (я выполняю свои эксперименты на 64-битных машинах).