Почему память глобальной структуры и переменная-член (одного типа) установлены равными глобальным разным? - PullRequest
0 голосов
/ 02 июля 2011

Я строю объект примерно так:

TestObj::TestObj(const TypedefStruct& myStruct) : m_memberStruct(myStruct){}

Структура выглядит следующим образом:

typedef struct{ short x; short y;} TypedefStruct;. это публичный член class TestObj .`

Когда я сравниваю память глобального myStruct, передаваемого в конструктор, и переменную-член m_memberStruct, равную TestObj, содержимое памяти отличается.

PS: я инициализирую глобальную структуру следующим образом: TestObj::TypeDefStruct myStruct = {0};

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

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

Ответы [ 2 ]

0 голосов
/ 02 июля 2011

Вы уверены, что смотрите на данные, а не произносите адреса объектов?

Вы можете попробовать инициализировать переменные легко распознаваемыми значениями, а затем посмотреть:

myStruct.x = 0xAA;
myStruct.y = 0xBB;
0 голосов
/ 02 июля 2011

Компилятор может дополнить m_memberStruct, потому что он является частью TestObj. То есть он может попытаться правильно настроить TestObj.

...