Я ищу способ, чтобы получить Orginal размер STRUCT/класс до того, как компилятор выровнен его (более четко скажем, сумму полей членов структуры/класса), как это:Возможно ли получить исходный размер класса/структуры до того, как компилятор выровняет его?
struct Foo{
char c;
// the compiler will appen 3 bytes here
int i;
};
Sizeof (Foo) возвращает 8, но размер оригинала равен 5.
предположит, что мы хотим, чтобы написать шаблон функцию или макрос с именем orig_sizeof()
template <class t>
size_t orig_sizeof(t)
{
// calculate the sum of the fields of t
}
Конечно sizeof
внутренний макрос, ключевым словом макрос, который не имеет исходный кода.
Возможный способ, чтобы это путем изменения структуры ALIGMENT с использованием __attribute__
или #pragma
, чем получить размер с помощью SizeOf после этого resturing в ALIGMENT по умолчанию (может быть, C++ 11 в decltype может быть полезно!), Любые идеи о полезное внедрение?
Edit: им пытаются написать оптимизированную библиотеку, которая не принимает в качестве аргумента в не оптимизированной структуры/класса, путем сравнения SizeOf (тип) с orig_sizeof (типа), и запрашивает у пользователя перестроить feilds для более высокая производительность, если возможно
Нет, его не по ssible. –
1) Не используйте спам-теги. C не C++ не C.2) Почему, по вашему мнению, размер объекта изменяется с выравниванием? 3) Если 'sizeof (Foo) == 8', размер' Foo' ** равен ** '8'. – Olaf
Нет такого понятия, как «оригинальный размер». У вас просто неправильный образ системы типа C++. –