Значение sizeof() определяется компилятором или компоновщиком?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Значение sizeof() определяется компилятором или компоновщиком?

Сообщение Anonymous »

Я пытаюсь устранить проблему C++, когда две части моего кода возвращают разные результаты для оператора sizeof().

Вот что я выполняю

Код: Выделить всё

MyClass* foo = new MyClass();
int size = sizeof(*foo)
Я помещаю этот код в два разных раздела моего проекта и получаю два разных результата. Один раз это 2254, другой - 2284. Я могу посмотреть на структуру памяти и увидеть, что в одной области внутренние элементы выровнены по байтам, а в другой - по словам.

Я посмотрите на дизассемблирование и увидите, что значения sizeof() на самом деле являются частью машинного кода. Будет ли это ошибкой компилятора или компоновщика? Почему две части одного и того же проекта по-разному рассматривают один и тот же класс?

РЕДАКТИРОВАТЬ:

Позвольте мне предоставить более наглядный пример, который я просто привел, чтобы показать, что это НЕ является нарушением ODR.

Я только что создал совершенно новый класс как таковой

Код: Выделить всё

class TestAlignClass
{
public:
TestAlignClass() { }
~TestAlignClass() { }

private:
char charArray[3];
int myInt;
};
Если класс выровнен по 4, он должен вернуть sizeof() = 8, что мне и нужно. Но в моем коде есть определенные классы, которые возвращают sizeof() = 7.

Фактически, когда я вхожу в оператор new(), иногда он выделяет 7 байт, а иногда он выделяет 8.

Я связываю несколько проектов вместе и сначала подумал, что это связано с настройками проекта, но в разных частях одного и того же проекта будет проявляться несоответствие.

Подробнее здесь: https://stackoverflow.com/questions/173 ... -or-linker
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»