나는과 같이 객체를 구성하고있다 :왜 전역 구조의 메모리와 (같은 유형의) 멤버 변수가 전역 변수와 같게 설정 되었습니까?
TestObj::TestObj(const TypedefStruct& myStruct) : m_memberStruct(myStruct){}
구조체는 다음과 같습니다
typedef struct{ short x; short y;} TypedefStruct;
합니다. I 글로벌 myStruct
의 메모리가 생성자 TestObj
m_memberStruct
의 멤버 변수로 전달되는 비교할 때 class TestObj
.`
의 공개 부재이며, 메모리 내용이 다르다.
PS : 나는과 같이 글로벌 구조체를 초기화하고 있습니다 : TestObj::TypeDefStruct myStruct = {0};
나는 컴파일러 가끔 패드 구조체의 요소는 각 요소를 같은 크기로 만드는 것, 그리고 그 메모리를 비교 방해 할 수 읽었습니다 글로벌 구조체의 "복사본"이지만 동일한 유형의 두 요소 구조체이므로 여기서는 적용되지 않는다고 생각합니다.
상황에 대한 통찰력이 있습니까? 두 요소의 값을 확인하는 것 외에 실제로 메모리를 비교할 수 없다면 메모리 내용이 다른 이유를 이해하고 싶습니다.
* 어떻게 *이 다른가 :
당신은 변수가 쉽게 값을 인식하고보고하기 위해 초기화 시도 할 수 있을까? 두 가지 덤프를 게시 할 수 있습니까? –
더 많은 코드를 표시하십시오. 이것이 일어날 이유가없는 것 같습니다. 또한 두 버전의 메모리 내용은 무엇입니까? –
어떻게 메모리를 비교하고 있습니까? 프로그램에서'memcmp'을 사용하고 있습니까? 아니면 디버거에 메모리를 버리고 있습니까? –