Здравствуйте Молочный Леонид Николаевич, вы писали:
МЛН>Есть такое дело ,объвляю структуру (одни данные )и к примеру мне нужно МЛН>заполнить её нулями вроде бы стандартная задача(использую memset),но делая МЛН>sizeof получаю размер на 4 байта больше это я потом вспомнил ,что это this МЛН>указатель, но просто из-за sizeof он у меня часто используется проблемы МЛН>возникают ,что мне делать подскажите ,как получить правильный размер ,так МЛН>как если это с то всё пучком если C++ проблемы. МЛН>и такое дело объявляю МЛН>struct { МЛН>unsigned char ver:4; МЛН>unsigned char len:4; МЛН>} МЛН>в памяти оно меняет октеты местами ,мне это не нужно ,хотя на самом деле это МЛН>было бы прваильно если это был бы один байт ,что мне делать ?
На C++Builder...
Октеты действительно меняет...
Но размер — 1 байт. И всё вроде даже логично.
Кстати о каком this идёт речь. Что это такое? (в данном контексте)
Вроде не класс. Обычная структура.
Почему ж тогда на Си++ проблемы (повторяю — у меня всё нормально)
Если проблемы с размером не связаны с описанной структурой, то...
Компиляторы имеют свойство... эээ... забыл как это по-русски...
Alignment что-ли.
Короче выравнивание происходит по размеру int'а (т.е. в Win32 на 4 байта).
Причём каждого параметра структуры (если их нельзя объединить).
struct st {
char v1;
char v2;
int v3;
};
Енто будет 8 байт (а не 6)
Первые 4 — char v1 и v2
Последние — int v3
struct st {
char v1;
int v3;
char v2;
};
А вот енто... ни за что не угадаешь — будет 12 байт (и не 6, и не 8)
Первые 4 — char v1
Вторые — int v3
Последние — char v2
Ээээ... такие фокусы нам ещё Коперфильд в институте на физике показывал
st a;
... = &a; // адрес структуры
... = &(a.v3); // адрес переменной v3
... = ((char*)&(s.v3)) — ((char*)&s); // смещение переменной v3 в структуре
--
Шутки шутками, но... если что надо спрашивай
Victor Dunaev (vitek@fromru.com)