Здравствуйте, Аноним, Вы писали:
А>Посоветуйте, как обеспечить правильное выравнивание. Допустим, у меня есть функция, которая из одного здорового массива байт выделяет блоки. Эта функция получает размер требуемого блока, и, допустим есть номер байта, с которого начинается незанятая память в массиве. Что я должен делать дальше, ведь номер свободного байта мне не обязательно подходит (допустим, адрес начала свободной области кратен 4, а я выделяю память под объект, у которого требования к выравниванию другие, например, 8).
А>Что будет, если я плюну на выравнивание и буду, допустим, по "плохому" адресу размещать объект? Это просто неумно, или это выльется в undefined behavior?
Это зависит от процессора. Например на Intel все будет работать, но медленнее при доступе к невыровнянным адресам. На PowerPC — будет interrupt. (Это то что я сам видел).
А>Да, еще хотелось бы к блоку прибавлять дополнительную информацию, тут ведь сразу все еще сложнее станет?
Когда я писал нечто похожее, я в функцию передавал на сколько выровнять. А доп. инфу добавляй сколько хочешь, главное правильный указатель возвращай.
Стандартные реализации heapа всегда выравнивают на 16 байт, так что не ошибутся

.
Математик должен быть ленивым. (c) мой бывший преподаватеть математики.