Я хотел бы выделить некоторую память, инициализировать ее для некоторых значений, а затем отличать разные сегменты этой памяти от разных структур. Что-то выглядит следующим образом:Литье памяти в объединение
union structA{
__int8 mem[3];
struct{
unsigned field1 : 8;
unsigned field2 : 12;
unsigned field3 : 4;
};
};
struct structB{
__int8 mem[10];
};
__int8 globalMem[128];
structA a1 <---- &globalMem[0]
structA a2 <---- &globalMem[10]
structB b1 <---- &globalMem[30]
Я попытался с помощью reinterpret_cast, и я не получаю ошибку компилятора, но это, кажется, что мои переменные (a1
, a2
и b1
) на самом деле не назначены/инициализируется правильно.
Любое представление о том, почему это не работает и каков правильный способ добиться чего-то подобного?
Спасибо!
Выравнивание битов и заполнение - это реализация. Вам нужно будет выяснить, добавил ли ваш компилятор дополнение к вашей структуре с битовыми полями. Очень вероятно. –
Также использование подписанного базового типа ('__int8') может быть не лучшей идеей. –
попробуйте обернуть вашу программу 'pragma pack (push, 1) PROGRAM pragma pack (pop)' Он должен устранить любые проблемы с заполнением, о которых говорил Сэм Варшавчик. – GoldenSpecOps