Если я знаю, что тоже типы T и U имеют одинаковое выравнивание, могу ли я использовать один вызов malloc следующим образом:
void* allocate_memory(int n, int m) {
return malloc(sizeof(T) * n + sizeof(U) * m);
}
, чтобы выделить непрерывную память для массивов этих двух типов?
Если все в порядке, как правильно получить указатель на первый элемент второго массива? Преобразование void * -> char * -> (+ = sizeof (T) * n) -> U * выглядит нормально, но я чувствую, что там может быть какое-то неопределенное поведение.
(япочти уверен, что это не может быть сделано в C ++, правила арифметики с указателями этого не позволят (ни в одном случае массив U не начинает существовать, поэтому вы не можете выполнять арифметику с указателями в этом хранилище). Отсюда моя осторожность в отношении правил C)