주 프로그램에서 선언 된 변수와 인스턴스화 된 클래스 객체 내부의 변수 사이의 메모리 주소 지정 차이점을 이해하려고 노력하고 있습니다!C++에서 "클래스 인스턴스화 된 객체 및 객체 주소 내부 변수"메모리 주소
내 질문은 "int a, int b"주 프로그램 내에서 예를 들어 두 개의 변수를 선언 할 때 메모리에서 특정 두 개의 주소가있는 4 + 4 바이트를 사용합니다. 예를 들어 "a는 메모리 0x248444에 있고 b는 0x248448에 있습니다."....이 경우에는 괜찮습니다. ...
"int c, int d"라는 두 변수가있는 클래스 인스턴스화 된 객체는 객체는 "0x248544"의 8 바이트 메모리 주소를 취하고 "int c 및 int d"의 주소는 어떻게됩니까?
int c 및 int d의 주소가 해당 개체 주소 "0x248544"안에 있습니까? int c 및 int d에 특정 주소가 있습니까?
어떻게 이해할 것인가/인스턴스화 된 클래스 개체 주소와 그 개체 안에있는 변수의 주소의 차이점은 무엇입니까?
내 질문에 분명 ....
인터넷에서 검색 후, 나는 "는 C++ 객체 모델 내부"하지만 인스턴스화 된 클래스 객체에 선언 된 변수에 대한 메모리 차이의 기본적인 이해라는 책을 발견 희망 main에 선언 된 변수. 누군가 나 자신을 분명히하도록 도와주세요.
미리 감사드립니다.
메모리 레이아웃은 플랫폼에 따라 다릅니다. 예를 들어, 멤버 간의 패딩은 특정 플랫폼의 멤버 유형에 대한 크기 및 정렬 요구 사항에 따라 달라집니다. 최신 표준에 대해서는 잘 모르겠지만, 잠시 동안 동일한 액세스 지정자를 가진 멤버에 대해서만 멤버 순서가 유지된다는 것을 알고 있습니다. –
related/dupe : http://stackoverflow.com/questions/26939609/how-is-the-memory-layout-of-a-class-vs-a-struct – NathanOliver
클래스 객체는 POD 인 경우 구조체와 레이아웃이 같습니다. (패딩 포함). 변수의 주소가 클래스 자체에서 오프셋 될 가능성이 있습니다. 'offsetof (cls, some_var)'를 사용할 수 있습니다. – Brandon